首页 > 解决方案 > 未定义值的顺序时,Oracle Insert Into 如何工作?

问题描述

我遇到了一些看起来像这样的代码。我知道它会返回自动生成的id,但我不明白的是当我调用这个函数时传递游标数据时,它如何识别当列顺序不是时要在哪些列中插入哪些值定义?

FUNCTION INSERT_ROW(DATA IN OWNER.TABLE%ROWTYPE)
    RETURN OWNER.TABLE.ID%TYPE
IS 
    l_ID OWNER.MY_TABLE.ID%TYPE;
    l_Data OWNER.MY_TABLE%ROWTYPE := DATA;
BEGIN   
    INSERT INTO OWNER.MY_TABLE
    VALUES l_Data
    RETURNING ID INTO l_ID;

我试图查找许多示例,但我只遇到按顺序定义值的示例,例如 INSERT INTO my_table (val2, val3, val4) VALUES (2, 3, 4) RETURNING val1 INTO val1;

标签: oracleplsqlinsert-into

解决方案


代码中的 insert values 语句是对带有括号的标准 insert values 子句的 PL/SQL 扩展。这是 12.2 手册中有关此主题的页面:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/INSERT-statement-extension.html#GUID-D81224C4-06DE-4635-A850-41D29D4A8E1B

OWNER.TABLE%ROWTYPE 数据类型定义与表具有相同列且顺序相同的记录。您只是将数据以该格式传递给函数并将其传递给变量,然后传递给插入语句。


推荐阅读