Ce face mai exact Returning … INTO … în Oracle SQL? (Programare, Oracle, Sql Returning)

Sonofblip a intrebat.

Am trecut recent de la utilizarea SQL Server la Oracle. Există câteva funcții specifice Oracle care mă încurcă. Documentația de la https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm nu a avut prea mult sens pentru mine.

Dacă fac ceva de genul:

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

unde schema tabelului este:

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

ce face? ce returnează?

Comentarii

  • se poate face Insert Into în SQL Server… –  > Por ps2goat.
  • De aceea întrebarea mea nu era despre ‘Insert Into’ ci despre ‘Returning Into’. –  > Por Sonofblip.
2 răspunsuri
Latesh

Clauza de returnare Oracle returnează valoarea coloanei specificate în variabila de ieșire. Din interogarea dvs. se pare că utilizați oracle auto increment pentru a popula cheia primară. Deci,

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

Acest lucru va introduce un rând în my_table cu valorile variabilelor specificate la indexul 2,3,4 în coloanele val2, val3, val4 și va returna cheia primară generată în variabila specificată la indexul 1.

Comentarii

  • Vă mulțumim! Mi-aș dori ca documentația Oracle să fie atât de clară. –  > Por Sonofblip.
  • „valorile variabilelor specificate la indexul 2,3,4” implică faptul că există variabile de legătură. Dacă „2” ar trebui să fie „:2”, „3” ar trebui să fie „:3”, etc., atunci acest lucru ar avea sens. Totuși, așa cum este scris, acestea sunt constante, nu variabile de legătură. –  > Por Justin Cave.
Justin Cave

Instrucțiunea SQL pe care ați postat-o nu are sens. Nu poți întoarce o coloană într-o constantă. Trebuie să o returnezi într-o variabilă locală de un anumit fel.

Să spunem, de exemplu, că tabelul tău are un trigger pe el care stabilește valoarea coloanei val1 coloană folosind un declanșator. Acest lucru ar permite ca insert să reușească în ciuda faptului că nu se specifică o valoare pentru cheia primară. Presupunând că aveți un astfel de declanșator și că faceți ceva de genul

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

va introduce un rând în my_table și returnează valoarea pe care declanșatorul a stocat-o în coloana val1 în variabila locală l_local_variable.