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

时间:2017-06-30 18:26:25

标签: database oracle stored-procedures sql-insert alter-table

我正在尝试向目标表添加一个临时列,并在where子句中使用该列,通过我用于从父对象到目标的一对一关系的存储过程将新数据插入到父表中表(见下面的代码)。我收到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';

1 个答案:

答案 0 :(得分:2)

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

如果可能,我会尝试找到不包含DDL的解决方案。该列可以成为表的永久部分吗?

如果必须遵循此路径,则insert和update语句将需要包含在字符串中并传递给execute immediateDBMS_SQL,以便在运行时对列进行解析和验证。创建