我遇到了一些看起来像这样的代码。我知道它将返回自动生成的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/