В чем разница между объявлениями ?
1.Инструкция var:
var id number;
exec :id := 1;
SELECT * FROM table_a WHERE id= :id ;
2 и 3.DEFINE и DECLARE
DEFINE id =1;
SELECT * FROM table_a WHERE id= &id;
DECLARE
v_text VARCHAR2(10); -- declare
BEGIN
v_text := 'Hello'; --assign
dbms_output.Put_line(v_text); --display
END;
В чем разница между объявлениями переменных?
http://ss64.com/ora/syntax-variables.html
Ответ
1. var[iable] - это способ объявления переменных в SQL*Plus, которые должны иметь какой-либо тип из указанных в справке. Их можно использовать в sql и в pl/sql как для подстановки каких-либо значений так и для сохранения значений, например:
variable value varchar2(10);
begin
select 'a'
into :value
from dual;
end;
/
select :value from dual
/
2. def[ine] - это способ объявления переменных в SQL*Plus, в которых можно указать текст, который будет подставлен вместо них в те места, где они используются. Так же с помощью этой команды можно получить список всех существующих переменных которые можно использовать для подстановки.
Если объявить переменную заранее и присвоить ей значение, то оно просто будет подставлено в тексте запроса:
define value = dual
select * from &value
/
Этот запрос выдаст такой результат:
old 1: select * from &value
new 1: select * from dual
D
-
X
В переменной можно указать почти любой текст:
define value ='23 from dual'
select 1&value
/
old 1: select 1&value
new 1: select 123 from dual
123
----------
123
Если переменной заранее не присвоить какое-либо текстовое значение, а просто использовать в тексте запроса, то SQL*Plus предложит ввести ее значение:
select * from &another_value
/
После выполнения этого текста SQL*Plus отобразит на экране просьбу указать значения для переменной:
Enter value for another_value:
Указав которое (в нашем случае dual) и нажав Enter мы увидим такой результат:
old 1: select * from &another_value
new 1: select * from dual
D
-
X
При вызове просто команды
define
Выведется примерно такой список уже существующих переменных:
DEFINE _DATE = "03-AUG-15" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl" (CHAR)
DEFINE _USER = "SYS" (CHAR)
DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1102000200" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE = "1102000200" (CHAR)
DEFINE VALUE = "dual" (CHAR)
3. declare - это часть объявления pl/sql блока кода define ... begin ... end после которой и до begin идет объявление переменных, которые можно использовать внутри блока begin ... end Например:
declare
val1 number;
val2 varchar2(10);
val3 date;
begin
select 1, 'a'
into val1, val2
from dual;
val3 := sysdate;
dbms_output.put_line(val1);
dbms_output.put_line(val2);
dbms_output.put_line(val3);
end;
/
Комментариев нет:
Отправить комментарий