我有一个PL/SQL过程,在其中我使用动态SQL创建并填充一个嵌套表。
稍后我想使用这个嵌套表来更新另一个使用MERGE
的表中的信息。
声明看起来有点像这样:
TYPE row_type IS RECORD (
a db_table.a%type,
b db_table.b%type,
c db_table.c%type
);
TYPE nested_type IS TABLE OF row_type INDEX BY INTEGER;
nested_table nested_type;
然后用一些动态SQL填充该表
合并看起来像这样:
MERGE INTO db_table t
USING table(nested_table) nt ON (t.a = nt.a AND t.b = nt.b)
WHEN MATCHED
THEN
UPDATE
SET c = nt.c,
d = nt.d
WHEN NOT MATCHED
THEN
INSERT (a, b, c, d)
VALUES (nt.a, nt.b, nt.c, nt.d);
表'db_table'具有列a、b、c、d、e和f,而'nested_table'仅具有列a、b、c和d。
当我运行该过程时,我得到一个错误
ORA-00902:数据类型无效
我该如何解决这个问题?是否可以将嵌套表合并到另一个表中?
编辑
问题似乎出在以下部分:
MERGE into db_table t
USING table(nested_table) nt
如果我用填充嵌套表的表替换table(nested_table),则过程运行正常。
1条答案
按热度按时间iq3niunx1#
是否有可能将嵌套表合并到另一个表中?
是的,你的代码可以工作,不需要修复。
声明对象类型和集合类型:
然后创建一个表(这是一个对象派生的表,但标准的表声明也可以工作)并添加一些示例数据:
然后运行查询(使用匿名PL/SQL块定义
nested_table
变量):然后,在
MERGE
之后,该表包含:| A|B|C|D|
| --------------|--------------|--------------|--------------|
| 1|1|第二章|三|
| 第二章|第二章|第二章|第二章|
| 三|三|六|九|
| 四|四|八|十二岁|
fiddle