Oracle
 sql >> Base de données >  >> RDS >> Oracle

PL/SQL Comment renvoyer tous les attributs dans ROW

Ce serait bien si nous pouvions faire quelque chose comme ça mais hélas :

SQL> declare
  2      v_row t23%rowtype;
  3  begin
  4      insert into t23
  5          values (my_seq.nextval, 'Daisy Head Maisy')
  6          returning * into v_row;
  7  end;
  8  /
        returning * into v_row;
                  *
ERROR at line 6:
ORA-06550: line 6, column 19:
PL/SQL: ORA-00936: missing expression
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignored


SQL>

Je pense qu'il peut y avoir une demande de modification enregistrée pour cette fonctionnalité, car je sais que beaucoup de gens le souhaitent. Mais pour le moment, tout ce que nous pouvons faire, c'est la spécification interminable de chaque colonne :

SQL> declare
  2      v_row t23%rowtype;
  3  begin
  4      insert into t23
  5          values (my_seq.nextval, 'Daisy Head Maisy')
  6          returning id, person_name into v_row;
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL>

Mauvaise nouvelle si vous avez beaucoup de colonnes !

Je soupçonne que la justification est que la plupart des tables ont relativement peu de colonnes dérivées (séquence attribuée à un ID, sysdate attribué à un CREATED_DATE, etc.), de sorte que la plupart des valeurs doivent déjà être connues (ou du moins connaissables) pour le processus d'insertion.

modifier

Je pensais avoir été clair, mais de toute façon :oui actuellement il est impossible d'utiliser * ou un mécanisme non spécifique similaire dans une clause RETURNING.