What does “%Type” mean in Oracle sql?

前端 未结 3 854
有刺的猬
有刺的猬 2021-01-30 13:22

I\'m getting my first experience with Oracle and TOAD (I know SSMS). I came across this \"%Type\" next to an input parameter in an update procedure and I have no idea what it is

相关标签:
3条回答
  • 2021-01-30 13:51

    Oracle (and PostgreSQL) have:

    • %TYPE
    • %ROWTYPE

    %TYPE

    %TYPE is used to declare variables with relation to the data type of a column in an existing table:

    DECLARE v_id ORDERS.ORDER_ID%TYPE
    

    The benefit here is that if the data type changes, the variable data type stays in sync.

    Reference: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/fundamentals.htm#i6080

    %ROWTYPE

    This is used in cursors to declare a single variable to contain a single record from the resultset of a cursor or table without needing to specify individual variables (and their data types). Ex:

    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;
    /
    
    0 讨论(0)
  • 2021-01-30 13:59

    some example

    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;
    /
    
    0 讨论(0)
  • 2021-01-30 14:14

    Apart from the purpose pointed by OMG Ponies, %TYPE is also used for inheriting the same data type used by a previously declared variable.

    The syntax is :

     DECLARE
                L_num NUMBER(5,2) NOT NULL default 3.21;
                L_num_Test L_num%TYPE := 1.123;
    

    So there is no need to declare the data type for the second variable i.e L_num_Test.

    Comment if anyone needs further clarification regarding this topic.

    Reference: https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#BEIIGBBF

    0 讨论(0)
提交回复
热议问题