Страницы

Поиск по вопросам

среда, 10 октября 2018 г.

Переменные ORACLE

В чем разница между объявлениями ?
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; /

Комментариев нет:

Отправить комментарий