首页 > 解决方案 > ORA-06550:第 1 行,第 7 列:PLS-00306:调用“输入”时参数的数量或类型错误

问题描述

C++代码如下:

vector<string> vA1(A1, A1 + k);
vector<string> vA2(A2, A2 + k);
vector<double> vA3(A3, A3 + k);
vector<string> vA4(A4, A4 + k);
vector<string> vA5(A5, A5 + k);

stmt = con->createStatement("BEGIN ABC.INPUT(:1, :2, :3, :4, :5); END;");
oracle::occi::setVector(stmt, 1, vA1, "VARCHAR2_5_TYPE");
oracle::occi::setVector(stmt, 2, vA2, "VARCHAR2_5_TYPE");
oracle::occi::setVector(stmt, 3, vA3, "NUMBER_10_2_TYPE");
oracle::occi::setVector(stmt, 4, vA4, "VARCHAR2_16_TYPE");
oracle::occi::setVector(stmt, 5, vA5, "VARCHAR2_16_TYPE");
stmt->executeUpdate();
con->commit();
con->terminateStatement(stmt);

Oracle脚本如下:

CREATE OR REPLACE PACKAGE "ABC" as 
  TYPE varchar2_5_type is table of varchar2(5) index by PLS_INTEGER; 
  TYPE number_10_2_type is table of number(10,2) index by PLS_INTEGER; 
  TYPE varchar2_16_type is table of varchar2(16) index by PLS_INTEGER; 
  CAL_MSLP PLS_INTEGER := 0;

  PROCEDURE INPUT(A1_ARRAY in varchar2_5_type,A2_ARRAY in varchar2_5_type,A3_ARRAY IN OUT NOCOPY number_10_2_type,A4_ARRAY in varchar2_16_type,A5_ARRAY in varchar2_16_type); 
end ABC;
/

CREATE OR REPLACE PACKAGE BODY "ABC" as

  PROCEDURE INPUT(A1_ARRAY in varchar2_5_type,A2_ARRAY in varchar2_5_type,A3_ARRAY in OUT NOCOPY number_10_2_type,A4_ARRAY in varchar2_16_type,A5_ARRAY in varchar2_16_type) is
     MSL_VALUE NUMBER(10,2);
  BEGIN
     ......
  END INPUT;
END ABC;
/

但是当我运行程序并调用OCCI函数将数据数组放入Oracle db时,错误提示如下:

ORA-06550:第 1 行第 7 列:PLS-00306:调用“输入”时参数的数量或类型错误 ORA-06550:第 1 行,第 7 列:PLS-00306:调用“输入”时参数的数量或类型错误INPUT' ORA-06550:第 1 行,第 7 列:PLS-00306:调用'INPUT'时参数的数量或类型错误 ORA-06550:第 1 行,第 7 列:PLS-00306:调用中的参数数量或类型错误到“输入” ORA-06550:第 1 行,第 7 列:PLS-00306:调用“输入”时参数的数量或类型错误 ORA-06550:第 1 行,第 7 列:

我该如何解决这个问题,非常感谢。

标签: c++oracleocci

解决方案


可能在模式级别而不是包级别定义类型可能会有所帮助


推荐阅读