OCI-22303: тип "". "VARCHAR2_5_TYPE" не найден - PullRequest
0 голосов
/ 18 июня 2020

Код C ++, как показано ниже:

stmt = con->createStatement("BEGIN ABC.INPUT(:1, :2, :3, :4, :5); END;");
oracle::occi::setVector(stmt, 1, id1, "VARCHAR2_5_TYPE");
oracle::occi::setVector(stmt, 2, id2, "VARCHAR2_5_TYPE");
oracle::occi::setVector(stmt, 3, data, "NUMBER_10_2_TYPE");
oracle::occi::setVector(stmt, 4, time1, "VARCHAR2_16_TYPE");
oracle::occi::setVector(stmt, 5, time2, "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(ID1_ARRAY in varchar2_5_type,ID2_ARRAY in varchar2_5_type,DATA_ARRAY IN OUT NOCOPY number_10_2_type,TIME1_ARRAY in varchar2_16_type,TIME2_ARRAY in varchar2_16_type); 
end ABC;
/

CREATE OR REPLACE PACKAGE BODY "ABC" as

  PROCEDURE INPUT(ID1_ARRAY in varchar2_5_type,ID2_ARRAY in varchar2_5_type,DATA_ARRAY in OUT NOCOPY number_10_2_type,TIME1_ARRAY in varchar2_16_type,TIME2_ARRAY in varchar2_16_type) is
     MSL_VALUE NUMBER(10,2);
  BEGIN
     ......
  END INPUT;
END ABC;
/

Но когда я запускаю программу и вызываю функцию OCCI, чтобы поместить массив данных в Oracle db, сообщение об ошибке, как показано ниже: OCI-22303: введите "". "VARCHAR2_5_TYPE" не найден

Как я могу исправить эту проблему, большое спасибо.

1 Ответ

0 голосов
/ 18 июня 2020

Вам нужно создать тип вне пакета как:

create or replace TYPE varchar2_5_type is table of varchar2(5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...