1

運の悪いブール値を返す PL/SQL メソッドを動的に呼び出そうとしています。私は答えを探し回りましたが、これは不可能のようです。

これは私がやろうとしていることの非常に簡単な例です:

create or replace 
function test_ret_bool return boolean as 
begin
  return true;
end test_ret_bool;

そして呼び出し:

declare
  ret_val boolean;
  sql_stmt varchar2(1000);
begin  
  sql_stmt := 'select test_ret_bool() from dual';
  execute immediate sql_stmt into ret_val;
end;

これは機能せず、エラーが発生します:

ORA-06553: PLS-382: expression is of wrong type

また、sql_stmt を次のように変更してみました。

sql_stmt := 'begin :result := test_ret_bool(); end;';
execute immediate sql_stmt using out ret_val;

次にPL/SQLエンジンを起動しますが、次のエラーが発生します:

PLS-00457: expressions have to be of SQL types

同じ問題を説明し、おそらくラッパー関数を使用している他のスレッドを見てきました。私の状況ではラッパー関数を使用することはできません。

おそらくこれに dbms_sql.execute() を使用することについていくつかのアイデアを見てきましたが、うまくいきませんでした。

誰でもアドバイスできますか?dbms_sql.execute() を使用してこの作業の例を提供できますか?

どうもありがとう!

4

3 に答える 3

2

Oracle 関数SYS.DIUTIL.bool_to_intおよびを使用できますSYS.DIUTIL.int_to_bool

于 2013-03-06T14:11:58.497 に答える
1

関数は問題ありません。問題は、Oracle がbooleanSQL のデータ型をサポートしていないことです。これが必要な場合は、純粋な PL/SQL (ABCAD の SQLfiddle のように) を使用するか、ブール値を Y/N、1/0 などに変換する必要があります。

サポートされているデータ型はこちらで確認できます。

于 2013-03-06T13:07:18.897 に答える
-2

これは同等です。何をしようとしているのか:

SELECT * FROM dual WHERE 1=1; -- TRUE

SELECT * FROM dual WHERE 1=2; -- FALSE
于 2013-03-06T14:00:14.560 に答える