Que signifie "%Type " dans Oracle sql?

je fais ma première expérience avec Oracle et crapaud (je connais SSMS). Je suis tombé sur ce" %Type " à côté d'un paramètre d'entrée dans une procédure de mise à jour et je n'ai aucune idée de ce que c'est ou de ce que cela signifie. J'ai trouvé des liens sur Google en rapport avec "%Rowtype". C'est la même chose ou quelque chose de totalement différent?

Si c'est vague, je m'en excuse. Comme toujours, merci pour l'aide.

30
demandé sur OMG Ponies 2010-09-25 00:17:36

3 réponses

Oracle (et PostgreSQL) avoir:

  • % TYPE
  • %ROWTYPE

% TYPE

%TYPE est utilisé pour déclarer des variables en rapport avec le type de données d'une colonne dans une table existante:

DECLARE v_id ORDERS.ORDER_ID%TYPE

l'avantage ici est que si le type de données change, le type de données variable reste synchronisé.

Référence: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/fundamentals.htm#i6080

% ROWTYPE

ceci est utilisé dans les curseurs pour déclarer une variable simple pour contenir un enregistrement simple à partir du jeu de résultats d'un curseur ou d'une table sans avoir besoin de spécifier des variables individuelles (et leurs types de données). 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;
/
50
répondu OMG Ponies 2010-09-24 20:43:25

%Type est utilisé pour hériter le même type de données utilisé par la variable déclarée précédente.

La syntaxe est :

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

Donc il n'est pas nécessaire de déclarer le type de données pour la deuxième variable.e L_num_Test.

Commentaire si quelqu'un a besoin de plus d'éclaircissements à ce sujet.

0
répondu Roshan jha 2017-03-27 09:39:44

exemple

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;
/
-2
répondu zloctb 2015-08-07 18:39:36