2016-09-30 1 views
2

Je suis récemment passé de l'utilisation de SQL Server à Oracle. Il y a des fonctions spécifiques à Oracle qui me déroutent. La documentation au https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm n'avait pas beaucoup de sens pour moi.Que fait exactement le retour .... INTO .... faire dans Oracle SQL?

Si je fais quelque chose comme:

INSERT INTO my_table (val2, val3, val4) 
VALUES (2, 3, 4) 
RETURNING val1 INTO 1 

où le schéma de la table est:

CREATE TABLE my_table (
    val1 NUMBER NOT NULL, 
    val2 NUMBER, 
    val3 NUMBER, 
    val4 NUMBER, 
    CONSTRAINT pk_val1 PRIMARY KEY (val1) 
) 

que fait-il? que retourne-t-il?

+0

vous pouvez faire «Insert Into» dans le serveur sql ... – ps2goat

+0

Voilà pourquoi ma question ne portait pas sur «Insérer dans» il s'agissait de "Returning Into". – Sonofblip

Répondre

-1

La clause de retour Oracle renvoie la valeur de colonne spécifiée dans la variable de sortie. De votre requête, il semble que vous utilisez l'incrément automatique d'Oracle pour remplir la clé primaire. Ainsi

INSERT INTO my_table (val2, val3, Val4) VALUES (2, 3, 4) DE RETOUR DANS val1 1

Ceci va insérer une ligne dans my_table avec les valeurs des variables spécifiées à l'index 2,3 , 4 dans les colonnes val2, val3, val4 et retour clé primaire générée dans la variable spécifiée à l'index 1.

+0

Merci! Je souhaite que la documentation d'Oracle soit aussi claire. – Sonofblip

+1

"valeurs de variables spécifiées à l'index 2,3,4" implique qu'il existe des variables de liaison. Si «2» devrait être «: 2», «3» devrait être «: 3», etc., alors cela aurait du sens. Comme écrit, cependant, ce sont des constantes qui ne lient pas les variables. –

-1

L'instruction SQL que vous avez publiée n'a pas de sens. Vous ne pouvez pas renvoyer une colonne dans une constante. Vous le renvoyez dans une variable locale quelconque. Supposons, par exemple, que votre table possède un déclencheur qui définit la valeur de la colonne val1 à l'aide d'un déclencheur. Cela permettrait à l'instruction insert de réussir malgré le fait de ne pas spécifier de valeur pour la clé primaire. En supposant que vous avez un tel déclencheur et que vous faites quelque chose comme

INSERT INTO my_table (val2, val3, val4) 
    VALUES (2, 3, 4) 
    RETURNING val1 INTO l_local_variable 

va insérer une ligne dans my_table et retourner la valeur que le déclencheur stocké dans la colonne val1 dans la variable locale l_local_variable.