回归到底意味着什么。。。。进入你在Oracle SQL中做什么?

回归到底意味着什么。。。。进入你在Oracle SQL中做什么?,oracle,sql-returning,Oracle,Sql Returning,我最近从使用SQL Server转到使用Oracle。有些特定于Oracle的函数让我感到困惑。当时的文档对我来说没有多大意义 如果我这样做: 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, v

我最近从使用SQL Server转到使用Oracle。有些特定于Oracle的函数让我感到困惑。当时的文档对我来说没有多大意义

如果我这样做:

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)
)

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

您发布的SQL语句没有意义。不能将列返回到常量中。将其返回到某种局部变量中

例如,假设您的表上有一个触发器,它使用触发器设置
val1
列的值。这将允许
insert
语句成功,尽管没有为主键指定值。假设你有这样一个触发器,你做了

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

将在
my_表中插入一行
,并将触发器存储在
val1
列中的值返回到局部变量
l_local_variable

Oracle returning子句在输出变量中返回指定的列值。从您的查询中,似乎您正在使用oracle auto increment来填充主键。所以

插入my_表(val2、val3、val4) 值(2、3、4) 将val1还原为1


这将在my_表中插入一行,将索引2,3,4中指定的变量值插入列val2、val3、val4中,并在索引1中指定的变量中返回生成的主键。

您可以在sql server中执行
insert-in
…这就是为什么我的问题不是关于“插入”,而是关于“返回到”。谢谢!我希望Oracle的文档能够如此清晰。“索引2,3,4中指定的变量值”意味着存在绑定变量。如果“2”应该是:2,“3”应该是:3”,等等,那么这是有意义的。然而,正如所写的,这些是常量而不是绑定变量。