web-dev-qa-db-fra.com

Que signifie "% Type" dans Oracle sql?

J'obtiens ma première expérience avec Oracle et TOAD (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 liés à "% Rowtype". La même chose ou quelque chose de complètement différent?

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

33
Matt M

Oracle (et PostgreSQL ) ont:

  • %TYPE
  • % ROWTYPE

%TYPE

%TYPE est utilisé pour déclarer des variables par rapport au 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#i608

% ROWTYPE

Ceci est utilisé dans les curseurs pour déclarer qu'une seule variable doit contenir un seul enregistrement 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;
/
55
OMG Ponies

%Type est utilisé pour hériter du même type de données que celui 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;

Il n'est donc pas nécessaire de déclarer le type de données pour la deuxième variable, c'est-à-dire L_num_Test.

Commentez si quelqu'un a besoin de précisions sur ce sujet.

0
Roshan jha