1. ホーム
  2. oracle

[解決済み] PLS-00306:Oracle SP の呼び出しで引数の数または種類が誤っている。

2022-02-09 20:12:12

質問事項

以下のコードを実行しようとしています。 SP と表示され、以下のようなエラーが発生します。

CREATE OR REPLACE PROCEDURE denodo.CLEAR_INDEX
   (   INDEX_NAME1 IN VARCHAR2,
       INDEX_NAME2 IN VARCHAR2,
       IT_WORKED   OUT BOOLEAN ) as
BEGIN
    IT_WORKED := FALSE;
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME1;
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME2;
    IT_WORKED := TRUE;
EXCEPTION
    WHEN OTHERS THEN
       IT_WORKED := FALSE;
END CLEAR_INDEX;

CLEAR_INDEX#0 [JDBC ROUTE] [ERROR] メッセージ 'ORA-06550: line 1, column 7.で例外を受信しました。 PLS-00306: 'CLEAR_INDEX'の呼び出しで引数の数または種類が正しくありません。 ORA-06550: 1 行目、7 列目。 PL/SQLです。ステートメントが無視されました。

どうなっているのでしょうか、よろしくお願いします。

解決方法は?

このエラーは、一般的に BOOLEAN というデータ型を OUT パラメータを使用し、それを印刷したり、他の Oracle 組み込みパッケージで何らかの操作を行おうとした場合。を直接使用することはできません。 BOOLEAN のデータ型は dbms_output.put_line またはその他の DBMS パッケージを使用します。例えば OUT パラメータを使用する必要があります。 sys.diutil.bool_to_int . 以下の例は、以下のように実行しようとしたときに直面するエラーを示しています。

DECLARE
  inx VARCHAR2(100):='ABC';
  var BOOLEAN;  
BEGIN
  CLEAR_INDEX(INDEX_NAME1=>inx ,IT_WORKED =>var);    
  dbms_output.put_line(var);
END;

問題に直面するのです。

ORA-06550: line 6, column 3:
PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
ORA-06550: line 6, column 3:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action

この問題を解決するには、以下のように実行する必要があります。

DECLARE
  inx VARCHAR2(100):='ABC';
  var BOOLEAN;
  var1 varchar2(10);
BEGIN
  CLEAR_INDEX(INDEX_NAME1=>inx ,IT_WORKED =>var);  

  var1:=CASE WHEN (sys.diutil.bool_to_int(var)) = 1 THEN 'TRUE'
             WHEN (sys.diutil.bool_to_int(var)) = 0 THEN  'FALSE'
             END;  
    dbms_output.put_line(var1);
END;

出力します。

anonymous block completed