2016-09-30 35 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值。