Подтвердить что ты не робот

Что означает "% Тип" в Oracle sql?

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

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

4b9b3361

Ответ 1

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;
/

Ответ 2

%Type используется для наследования того же типа данных, который использовался предыдущей объявленной переменной.

Синтаксис:

 Declare
            L_num Number(5,2) not null default 3.21;
            L_num_Test L_num%Type:=1.123;

Поэтому нет необходимости объявлять тип данных для второй переменной i.e L_num_Test.

Комментировать, если кому-то нужно уточнить эту тему.

Ответ 3

некоторый пример

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;
/