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ă?
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.
- Vă mulțumim! Mi-aș dori ca documentația Oracle să fie atât de clară. – > .
- „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ă. – > .
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
.
Insert Into
în SQL Server… – > Por ps2goat.