oracle - 当未定义值的顺序时,Oracle Insert Into 如何工作?

标签 oracle plsql 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;

我尝试查找许多示例,但只遇到了按如下顺序定义值的示例 插入 my_table (val2, val3, val4) 值 (2, 3, 4) 返回 val1 进入val1;

最佳答案

Oracle 中表中的列顺序是定义的。看一下 ALL_TAB_COLUMNS View - 有一个 COLUMN_ID 列定义表中列的顺序。如果 SELECT 中未给出字段列表(即 SELECT * FROM MY_TABLE),则 MY_TABLE 中的列将以 ALL_TAB_COLUMNS.COLUMN_ID 顺序返回。这也与在 %ROWTYPE 变量中对列进行排序的方式相同,并且这也是未指定字段列表的 INSERT 期望对字段进行排序的方式。

关于oracle - 当未定义值的顺序时,Oracle Insert Into 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50882923/

相关文章:

oracle - pl/sql 中的异常处理

oracle - PL/SQL 和日期间隔

mysql - 使用另一个表中的值插入数据库行

select - MS access 选择查询中使用 DatePart 进行数据转换

sql - 为什么存储过程不能与 select、where 和 having 一起使用

database - 甲骨文接口(interface)

indexing - 在PLSQL中通过循环重建索引

MySQL INSERT INTO 单列从 SELECT 查询中从另外两个表中提取数据 - 抛出 #1062 - 键 2 的重复条目 '' 错误

java - 寻址 "WebLogic server side components must use AQ JMS datasource configuration"

oracle - 这些 PL/SQL 变量初始化是否等效?