Oracle PLS-00382类型错误咨询:PL/SQL批量插入问题排查
PLS-00382: expression is of wrong type 错误原因及修复
你的代码存在变量类型声明与赋值不匹配的核心问题,具体如下:
- 变量
BK7和BK8被声明为acct_common.TYPE_TABVARCHAR(字符串数组类型),但赋值时却使用acct_common.TYPE_TABNUMBER()构造函数传入数值,类型完全不兼容,直接触发PLS-00382错误。 - 额外注意:
INSERT INTO table中的table是Oracle关键字,建议替换为实际业务表名,避免潜在语法冲突。
修正后的代码(两种可选方案)
方案1:修正变量声明(若BK7、BK8应为数值类型)
declare errstr varchar2(4000) := ''; errors NUMBER; i NUMBER; er NUMBER; BK1 acct_common.TYPE_TABNUMBER; BK2 acct_common.TYPE_TABDATE; BK3 acct_common.TYPE_TABNUMBER; BK4 acct_common.TYPE_TABVARCHAR; BK5 acct_common.TYPE_TABVARCHAR; BK6 acct_common.TYPE_TABNUMBER; -- 修正:将BK7、BK8的类型改为TYPE_TABNUMBER BK7 acct_common.TYPE_TABNUMBER; BK8 acct_common.TYPE_TABNUMBER; BK9 acct_common.TYPE_TABNUMBER; begin BK1 := acct_common.TYPE_TABNUMBER(1391461367,1391461368,1391461369); -- 补充日期格式掩码,避免会话格式差异导致转换错误 BK2 := acct_common.TYPE_TABDATE(to_date('09/30/2023','MM/DD/YYYY'),to_date('09/30/2023','MM/DD/YYYY'),to_date('09/30/2023','MM/DD/YYYY')); BK3 := acct_common.TYPE_TABNUMBER(11710317,11710317,11710317); BK4 := acct_common.TYPE_TABVARCHAR(null,null,null); BK5 := acct_common.TYPE_TABVARCHAR('Consolidation','Consolidation','Consolidation'); BK6 := acct_common.TYPE_TABNUMBER(665,665,665); BK7 := acct_common.TYPE_TABNUMBER(665,665,665); BK8 := acct_common.TYPE_TABNUMBER(665,665,665); BK9 := acct_common.TYPE_TABNUMBER(400000164779,400000164779,400000164779); -- 替换table为实际表名 forall i in 1 .. 3 INSERT INTO your_actual_table (col1,col2,col3,col4,col5,col6,col7,col8,col9) VALUES (BK1(i),BK2(i),BK3(i),BK4(i),BK5(i),BK6(i),BK7(i),BK8(i),BK9(i)); end; /
方案2:修正赋值语句(若BK7、BK8必须为字符串类型)
将BK7、BK8的赋值改为字符串构造:
BK7 := acct_common.TYPE_TABVARCHAR('665','665','665'); BK8 := acct_common.TYPE_TABVARCHAR('665','665','665');
内容的提问来源于stack exchange,提问作者Arpit Jain
相关产品推荐
相关产品推荐

