Что означает "%Type " в Oracle sql?
Я получаю свой первый опыт работы с Oracle и TOAD (я знаю SSMS). Я столкнулся с этим "% Type " рядом с входным параметром в процедуре обновления, и я понятия не имею, что это такое и что это значит. Я нашел ссылки в Google, связанные с"%Rowtype". Это одно и то же или что-то совершенно другое?
Если это неопределенно, я приношу свои извинения. Как всегда, спасибо за помощь.
3 ответов:
Oracle (и PostgreSQL) имеют:
- %TYPE
- %ROWTYPE
%TYPE
%TYPEиспользуется для объявления переменных по отношению к типу данных столбца в существующей таблице:DECLARE v_id ORDERS.ORDER_ID%TYPEПреимущество здесь заключается в том, что при изменении типа данных переменный тип данных остается синхронизированным.
Ссылка: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/fundamentals.htm#i6080
%ROWTYPE
Это и есть используется в курсорах для объявления одной переменной, содержащей одну запись из результирующего набора курсора или таблицы, без указания отдельных переменных (и их типов данных). Пример:
DECLARE CURSOR c1 IS SELECT last_name, salary, hire_date, job_id FROM employees WHERE employee_id = 120; -- declare record variable that represents a row fetched from the employees table employee_rec c1%ROWTYPE; BEGIN -- open the explicit cursor and use it to fetch data into employee_rec OPEN c1; FETCH c1 INTO employee_rec; DBMS_OUTPUT.PUT_LINE('Employee name: ' || employee_rec.last_name); END; /
%Typeиспользуется для наследования того же типа данных, что и предыдущая объявленная переменная.Синтаксис:
Таким образом, нет необходимости объявлять тип данных для второй переменной, т. е.Declare L_num Number(5,2) not null default 3.21; L_num_Test L_num%Type:=1.123;L_num_Test.Прокомментируйте, если кто-то нуждается в дальнейших разъяснениях по этой теме.
Пример
set serveroutput on DECLARE var1 table_a.id%TYPE; var2 table_a.value%TYPE; var3_row table_a%ROWTYPE; BEGIN SELECT id,value INTO var1, var2 FROM table_a WHERE id= 8 AND ROWNUM<=1; SELECT id+100,value INTO var3_row from table_A where rownum=1; INSERT INTO table_a VALUES var3_row; dbms_output.put_line('this is a test'); dbms_output.put_line(var1); dbms_output.put_line(var2); NULL; -- do something useful here EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- do something appropriate here WHEN TOO_MANY_ROWS THEN NULL; -- do something appropriate here END; /
Comments