В чем разница между переменными bind и переменной, которую я ввожу с помощью &&?
в чем разница между этими двумя объявлениями переменных?
1: num number:='&&num';
2: variable num1 number;
так как в обоих случаях я могу ссылку num С помощью &num или &&num в других файлах тоже,
и в случае переменных bind :num1.
1: variable num1 number;
Два: var num1 number;
1 ответов
у вас, похоже, есть некоторая путаница в различиях между связывать переменные в Oracle и замена переменных в SQL * Plus.
давайте начнем с переменных подстановки. Переменные подстановки уникальны для SQL * Plus и не являются частью базы данных. Они не будут работать, если вы попытаетесь использовать их с JDBC, например.
переменные подстановки могут содержать только фрагмент текста. Если SQL * Plus обнаруживает подстановку переменная в строке ввода она заменит переменную ее текстовым содержимым:
SQL> define subvar=X
SQL> select * from dual where dummy = &subvar;
old 1: select * from dual where dummy = &subvar
new 1: select * from dual where dummy = X
select * from dual where dummy = X
*
ERROR at line 1:
ORA-00904: "X": invalid identifier
обратите внимание, что SQL*Plus заменил нашу переменную подстановки ее текстовым значением без учета того, дал ли он нам действительный SQL. В приведенном выше примере мы опустили одинарные кавычки вокруг &subvar и он дал нам недопустимый SQL, поэтому мы получили ошибку.
в начале строки old и new покажите нам строку, которую мы ввели до и после SQL * Plus применили подстановку переменная. The new строка-это строка, которую пыталась запустить база данных.
вы можете включить или отключить отображение old и new линий с помощью SET VERIFY ON и SET VERIFY OFF. Вы также можете включить или выключить замену переменных подстановки с помощью SET DEFINE ON и SET DEFINE OFF.
если мы хотим запустить этот запрос, используя замену переменной, мы должны поместить его в кавычки:
SQL> select * from dual where dummy = '&subvar'; old 1: select * from dual where dummy = '&subvar' new 1: select * from dual where dummy = 'X' D - X
если &subvar содержит строку, которая была допустимой число (например 5), то мы можем уйти без использования кавычек, но это только потому, что вынимая текст &subvar и заменить его текстом 5 случается, чтобы дать нам действительный SQL.
например, предположим, что есть таблица под названием test при следующих данных:
A
----------
1
2
3
4
5
тогда мы можем сделать
SQL> define subvar=5
SQL> select * from test where a = &subvar;
old 1: select * from test where a = &subvar
new 1: select * from test where a = 5
A
----------
5
переменные Bind, с другой стороны, имеют типы. Это не простые текстовые значения. Их значения отправляются в базу данных, и база данных также может устанавливать их значения.
SQL> variable bindvar varchar2(1); SQL> exec :bindvar := 'X'; PL/SQL procedure successfully completed.
вы не ставите кавычки вокруг переменной привязки, когда хотите ее использовать:
SQL> select * from dual where dummy = :bindvar; D - X SQL> select * from dual where dummy = ':bindvar'; no rows selected
во втором примере выше мы не получили строк, потому что DUAL таблица не имеет строк с DUMMY столбец, содержащий текст :bindvar.
вы получите ошибку, если попытаетесь присвоить значение неправильного типа переменной bind:
SQL> variable bindvar number; SQL> exec :bindvar := 'X'; BEGIN :bindvar := 'X'; END; * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1
переменные Bind являются стандартной частью база данных, и вы можете использовать их с JDBC или любым методом подключения к базе данных, который вы выбираете.
наконец, variable num1 number и var num1 number оба означают одно и то же. Они оба определяют переменную bind num1 типа number. var - это просто сокращение для variable.