【问题标题】:What exactly does Returning .... INTO .... do in Oracle SQL?Returning .... INTO .... 在 Oracle SQL 中究竟做了什么?
【发布时间】:2016-09-30 18:34:35
【问题描述】:

我最近从使用 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

表架构在哪里:

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

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

【问题讨论】:

  • 你可以在sql server中做Insert Into...
  • 这就是为什么我的问题不是关于“插入”而是关于“返回”。

标签: oracle sql-returning


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!我希望 Oracle 的文档这么清楚。
  • “在索引 2,3,4 处指定的变量值”表示存在绑定变量。如果“2”应该是“:2”,“3”应该是“:3”等等,那么这是有道理的。然而,正如所写,这些是常量而不是绑定变量。
【解决方案2】:

您发布的 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中。

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2012-07-23
    • 2016-09-10
    • 2023-03-15
    • 2012-10-17
    • 2021-06-04
    • 1970-01-01
    • 2018-07-30
    • 2019-10-06
    相关资源
    最近更新 更多