在oracle中为插入存储过程添加临时列

Add temporary column for insert stored procedure in oracle

我正在尝试向目标 table 添加一个临时列,并在 where 子句中使用该列通过存储过程将新数据插入 parent table我正在使用从 parent 到目标 table 的 one-to-one 关系(参见下面的代码)。我在 alter table add column 语句中遇到错误,因此导致 IMPORT_NUMBER 成为无效标识符。任何帮助将不胜感激。

EXECUTE IMMEDIATE
'ALTER TABLE TARGET_TABLE ADD IMPORT_NUMBER NUMBER';

INSERT
INTO
TARGET_TABLE(
existing_col_1,
existing_col_2,
existing_col_3,
IMPORT_NUMBER
)
SELECT
STAGED_TABLE.value1,
STAGED_TABLE.value2,
STAGED_TABLE.value3,
STAGED_TABLE.IMPORT_NUMBER
FROM
STAGED_TABLE
GROUP BY
IMPORT_NUMBER;

UPDATE
PARENT_TABLE
SET
target_table_id =(
SELECT
TARGET_TABLE.id
FROM
TARGET_TABLE
WHERE
TARGET_TABLE.IMPORT_NUMBER = PARENT_TABLE.IMPORT_NUMBER
)
WHERE
PARENT_TABLE.IMPORT_NUMBER IS NOT NULL;

EXECUTE IMMEDIATE 'ALTER TABLE TARGET_TABLE DROP COLUMN IMPORT NUMBER';

如果这是一个存储过程,整个过程在 create or replace procedure 时被解析和验证。在创建过程时,列 IMPORT_NUMBER 不存在,因此无法验证插入和更新语句。

如果可能,我会尝试找到不包含 DDL 的解决方案。该专栏能否成为 table 的永久部分?

如果您必须遵循此路径,插入和更新语句将需要以字符串形式传递给 execute immediateDBMS_SQL,以便它们在 运行 处被解析和验证时间,在创建列之后。