【发布时间】:2017-12-04 18:53:36
【问题描述】:
我正在尝试向目标表添加一个临时列,并在 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';
【问题讨论】:
-
您确定失败的是您的添加列而不是删除列吗?作为“NUMBER”数据类型列出的删除列,不应该存在。我预计 INSERT 的 SELECT 部分也会失败,因为您选择了 4 个值,但仅按 1 分组。
-
...或者,更确切地说,该位置的 NUMBER 不是数据类型。缺少下划线;它应该是 DROP COLUMN IMPORT_NUMBER。
标签: database oracle stored-procedures sql-insert alter-table