в чем разница между & и : в PL/SQL в оракуле?

Я изучаю PL/SQL и просматриваю переменную связывания. Я понял, что переменная связывания, которую мы использовали для передачи значений RUN-TIME.

но в чем разница между & и :(двоеточие) в PL/SQL? оба одинаковы или есть какая-то разница между этими двумя? когда я должен использовать & и : ?


person user1252398    schedule 16.04.2012    source источник


Ответы (2)


& используется только в SQL*Plus, за его пределами это значение не имеет.

В то время как SQL*Plus "разбирает" входной буфер, он заменяет &variables тем, что они были defined. См. также эту ссылку и эта ссылка. Технический термин – это переменная подстановки.

С другой стороны, :variable являются настоящими переменными связывания. Они используются, когда механизм SQL Oracle "анализирует" и выполняет оператор SQL. См., например, эту ссылку или эта ссылка.

Короче говоря, &variables заменяется SQL*Plus и затем передается механизму SQL Oracle, а :variables остается нетронутым SQLPlus и передается механизму SQL Oracle по мере их появления. Вне SQLPlus, & не имеет смысла.

person René Nyffenegger    schedule 16.04.2012

& не имеет значения в PL/SQL, на самом деле это функция SQL Plus (которая была скопирована в Toad, SQL Developer и т. д. для совместимости). В SQL Plus & используется для определения переменной подстановки, которая заменяется указанным замещающим текстом в SQL Plus перед отправкой кода на сервер для обработки.

Правильный синтаксис для подстановочной переменной SQL Plus — &name., т. е. начинается с & и заканчивается на ., но в большинстве случаев . не является обязательным. Итак, когда вы запускаете этот код в SQL Plus:

select * from emp where ename = '&name.';

SQL Plus запрашивает у пользователя значение name и подставляет его в запрос перед его запуском. Итак, если пользователь вводит KING, то фактически выполняется SQL:

select * from emp where ename = 'KING';
person Tony Andrews    schedule 16.04.2012