如何解决调用ADD_PRICELIST时报PLS-00306参数数量或类型错误问题
PLS-00306 错误排查与修正方案
- 第一步:确认
ADD_PRICELIST函数的参数定义
该报错本质是调用ADD_PRICELIST时传入的参数数量、类型、顺序与函数实际定义的要求不匹配,首先执行以下SQL查询函数的参数详情:SELECT argument_name, data_type, in_out, defaulted FROM all_arguments WHERE object_name = 'ADD_PRICELIST' AND object_type = 'FUNCTION' ORDER BY position; - 第二步:对照参数规则修正调用逻辑
常见问题及修复方式:- 参数数量不足/过多:如果
ADD_PRICELIST要求2个及以上必填参数,你当前仅传入1个ROUND(dbms_random.value(0,10),3),补全所有必填参数即可 - 参数类型不匹配:如果
ADD_PRICELIST要求入参为整数、字符串或其他自定义类型,你当前传入的是带小数的NUMBER类型,调整传入值的类型匹配要求即可 - 参数顺序错误:未指定参数名传参时,顺序必须和函数定义完全一致,也可以通过
参数名 => 传入值的写法指定参数名,规避顺序问题
- 参数数量不足/过多:如果
- 第三步:修复现有代码的语法错误
你贴出的PRICELIST_DATA函数中存在多余的END IF;语句,没有对应的IF开头匹配,需要直接删除该语句,否则即使参数匹配也会编译失败。
修正后代码参考示例
假设查询后确认ADD_PRICELIST仅需要1个整数类型入参,修正后的代码如下:
CREATE OR REPLACE FUNCTION PRICELIST_DATA( CPRIC_DATA_ID CUSTOMERS.CUSTOMERS_ID%TYPE, IPRIC_DATA_ID ITEMS.ITEMS_ID%TYPE ) RETURN NUMBER AS L_PRICELIST_DATA_ID NUMBER; BEGIN L_PRICELIST_DATA_ID := ADD_PRICELIST(ROUND(dbms_random.value(0,10),0)); RETURN L_PRICELIST_DATA_ID; END PRICELIST_DATA; /
内容的提问来源于stack exchange,提问作者GEO
相关产品推荐
相关产品推荐

