2016-09-30 39 views
2

我最近從使用SQL Server切換到Oracle。有一些Oracle特定的功能令我感到困惑。 https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm的文檔對我沒有多大意義。返回.... INTO ....在Oracle SQL中做什麼?

如果我做這樣的事情:

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

其中表模式是:

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

它有什麼作用?它返回什麼?

+0

您可以執行'插入到'sql服務器... – ps2goat

+0

這就是爲什麼我的問題不是'插入到'它是關於'迴歸'。 – Sonofblip

回答

-1

Oracle返回子句返回輸出變量中指定的列值。從您的查詢看來,您似乎正在使用oracle自動增量來填充主鍵。所以

INSERT INTO MY_TABLE(val2的,VAL3,VAL4) VALUES(2,3,4) RETURNING VAL1 INTO 1

這將在MY_TABLE插入一行與索引2,3指定的變量的值,4到列val2,val3,val4和返回生成的主鍵在索引1指定的變量。

+0

謝謝!我希望Oracle的文檔清楚。 – Sonofblip

+1

「在索引2,3,4處指定的變量值」暗示存在綁定變量。如果「2」應該是「:2」,「3」應該是「:3」等,那麼這是有道理的。正如所寫的,然而,那些常量不是綁定變量。 –

-1

你發佈的SQL語句沒有意義。您不能將列返回到常量中。你將它返回到某種局部變量。

比方說,例如,您的表上有一個觸發器,它使用觸發器設置val1列的值。儘管沒有爲主鍵指定值,這將允許insert語句成功。假設你有這樣的觸發,你這樣做

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

將插入一行到my_table,並返回存儲在val1列觸發到本地變量l_local_variable值。