Что означает "%Type " в Oracle sql?



Я получаю свой первый опыт работы с Oracle и TOAD (я знаю SSMS). Я столкнулся с этим "% Type " рядом с входным параметром в процедуре обновления, и я понятия не имею, что это такое и что это значит. Я нашел ссылки в Google, связанные с"%Rowtype". Это одно и то же или что-то совершенно другое?



Если это неопределенно, я приношу свои извинения. Как всегда, спасибо за помощь.

1038   3  

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

    Ничего не найдено.