11

正確なプロシージャ シグネチャを使用して API を呼び出そうとしていますが、どういうわけか、数字のテーブルが正しく認識されていないと思います。

API 定義:

TYPE NUMLIST IS TABLE OF NUMBER INDEX BY VARCHAR2(50);

PROCEDURE GETSERVICES_API
(
   I_DIMOBJID IN NUMBER, I_OBJECTID IN NUMBER, I_FILTER IN NUMBER, 
   O_ERRORCODE OUT NUMBER, O_ERRORTEXT OUT VARCHAR2, O_SERVICELIST OUT NUMLIST
);

APIの私の呼び出し:

DECLARE

   TYPE NUMLIST IS TABLE OF NUMBER INDEX BY VARCHAR2(50);
   lt_SERVICELIST              NUMLIST;

   ls_errortext             varchar2(100);
   ln_errorcode             number;

BEGIN


    PKGCOMSUPPORT_SERVICE.GETSERVICES_API(I_DIMOBJID => 6,
                                          I_OBJECTID => 5263,
                                          I_FILTER => 3,
                                          O_ERRORCODE => ln_errorcode,
                                          O_ERRORTEXT => ls_errortext,
                                          O_SERVICELIST => lt_SERVICELIST);

END;

API の呼び出しを実行すると、次のようになりました: PLS-00306: 'GETSERVICE_API の呼び出しで引数の型の数が間違っています

理由はありますか?ありがとう

4

4 に答える 4

11

エラーに直面している理由は、パッケージ仕様で定義されたコレクション型と無名 PL/SQL ブロックで定義されたコレクション型PLS-00306の非互換性です。これら 2 つのコレクション型の定義は同じですが、互換性はありません。無名PL/SQLブロックでは、データ型の変数を宣言してプロシージャ に渡す必要があります。NUMLISTNUMLISTGETSERVICES_APIPKGCOMSUPPORT_SERVICE.NUMLIST

create or replace package PKG as
  type t_numlist is table of number index by varchar2(50);
  procedure SomeProc(p_var in pkg.t_numlist);
end;
/

create or replace package body PKG as
  procedure someproc(p_var in pkg.t_numlist) is
  begin
    null;
  end;
end;
/

declare
  type t_numlist is table of number index by varchar2(50);
  l_var t_numlist;
begin
  pkg.someproc(l_var);
end;

ORA-06550: line 5, column 3:
PLS-00306: wrong number or types of arguments in call to 'SOMEPROC'

declare
  --type t_numlist is table of number index by varchar2(50);
  l_var pkg.t_numlist;
begin
  pkg.someproc(l_var);
end;

anonymous block completed
于 2013-10-23T14:56:03.243 に答える
0

型定義が無効だと思います。テーブル「タイプ」を作成するには、次のようなものが必要です。

CREATE OR REPLACE TYPE NUMLIST AS OBJECT (COLUMN1 VARCHAR2(50));
于 2013-10-23T14:25:48.703 に答える