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 处指定的变量中生成的主键.
我最近从 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 处指定的变量中生成的主键.