Returning .... INTO .... 在 Oracle SQL 中究竟做了什么?

What exactly does Returning .... INTO .... do in Oracle SQL?

我最近从 SQL Server 切换到 Oracle。有一些 Oracle 特定功能让我感到困惑。 https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm 上的文档对我来说意义不大。

如果我这样做:

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

其中 table 架构是:

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

它有什么作用?它是什么 return?

您发布的 SQL 声明没有意义。您不能将一列 return 转换为常量。你 return 把它变成某种局部变量。

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

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

将插入一行到 my_table 和 return 触发器存储在 val1 列中的值到局部变量 l_local_variable.

Oracle returning 子句 returns 在输出变量中指定列值。从您的查询看来,您正在使用 oracle 自动增量来填充主键。所以

插入 my_table (val2, val3, val4) 值(2、3、4) 将 val1 返回到 1

这将在 my_table 中插入一行,其中在索引 2、3、4 处指定的变量值插入列 val2、val3、val4 和 return 在索引 1 处指定的变量中生成的主键.