我有一个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)替换为用于填充嵌套表的表,则过程运行良好。
是否有可能从嵌套表合并到另一个表?
是的,你的代码工作,不需要修改。
声明对象类型和集合类型:
CREATE TYPE obj_type IS OBJECT(
a INT,
b INT,
c INT,
d INT
);
CREATE TYPE obj_table IS TABLE OF obj_type;
然后创建一个表(这是一个对象派生的表,但标准表声明也可以工作)并添加一些示例数据:
CREATE TABLE db_table OF obj_type;
INSERT INTO db_table (a,b,c,d)
SELECT 1 As a, 1 AS b, 1 AS c, 1 AS d FROM DUAL UNION ALL
SELECT 2, 2, 2, 2 FROM DUAL UNION ALL
SELECT 3, 3, 3, 3 FROM DUAL;
然后运行您的查询(使用匿名PL/SQL块来定义nested_table
变量):
DECLARE
nested_table obj_table := obj_table(
obj_type(1,1,2,3),
obj_type(3,3,6,9),
obj_type(4,4,8,12)
);
BEGIN
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);
END;
/
在MERGE
之后,表中包含:
相关内容
- 为什么我的django服务器抛出一个无效数据类型的错误
- 无法导入表(无效数据类型)
- Spring Boot请求主体验证在输入无效数据类型时添加自定义消息
- 乘法矩阵获取einsum的无效数据类型
- 如何处理具有无效数据类型的异常
- DBMS_SQL.NUMBER_TABLE内部更新语句抛出无效数据类型错误
- Oracle : 过程在执行过程中引发无效数据类型错误 ORA-00902: 无效的数据类型
- 如何发送有关 POST 无效数据类型的用户友好错误消息
- 创建表Oracle上的无效数据类型错误
- 插入收集类型Oracle 12C -ORA -00902:无效数据类型中的表中
- Python : 使用 pandavro 无效数据类型 64[ns] 生成 avro 模式
- 显示"ERROR#"或无效数据类型错误的 SQL Server Reporting Studio 报表
- 反序列化包含无效数据类型的 XML
- 给出无效数据类型的布尔值 - 预言机
- ASP.无效数据类型的自定义验证消息
- 带批量收集的表函数抛出无效数据类型
- 如何创建一个循环,在用户每次输入无效数据类型时提示用户输入数据?
- 试图修改表的无效数据类型
- 添加检查约束,得到无效数据类型错误
- 处理CF远程函数中的无效数据类型
最新更新
- 函数式语言类型推断混乱
- 使用Python从大文件解析数字数据时提高速度
- 如何从Multipass共享文件夹到主机?
- 从CMD或批处理文件中禁用"Notify me when the clock changes"设置
- 在Dockerfile中设置——net=host ?
- 如何在React中将arrayBuffer转换为JSON
- 是否有可能将html响应转换为json在扑动?
- 快速过滤numpy数组值的方法
- C保存字符串的数组列表
- 需要minio film配置建议
- 如何应用CSS字体大小"relative to what it would be originally"?
- 该应用程序在个人帐户中未绑定脚本时被阻止错误
- 将原始查询转换为django orm
- 如何从出现次数和值的列表中创建一个新列表
- 使用Julia中的Julia Broadcasting根据数组的索引计算数组值
- 在javascript中使用条件更新嵌套数组
- for循环多个条件
- 将第一列中的名称行转换为r中的列
- Nx张量的映射切片
- Dotnet Core Azure功能(隔离进程)如何加载应用程序.每个环境的Json
- Discordjs不发送消息
- 边框在css中不显示
- Python pandas中的深度嵌套JSON规范化
- 如何在JSON模式中从正确的对象中选择特定的字段
- 我可以在REST API中直接通过POST发送电话号码吗?
- "onPressed: () {}"在颤振中不起作用
- FbLitho在RecyclerCollectionComponent中重复视图,即使加载了新部分
- Spring Data JPA对多对多关系的查询返回所有记录,而不是匹配的记录
- 在使用const断言递归时更改函数参数以接受子函数
- 我们可以通过调用Power BI Service/Workspace的export功能导出嵌入式Power BI报表的P
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium