1

入力に基づいてクエリを動的に実行する関数を作成しようとしています。関数input_idの最初の入力は、動的クエリの引数です。2番目の入力IN_QUERY_IDは、使用するクエリを指定します。

create or replace  
FUNCTION getResultID(  
INPUT_ID NUMBER,  
IN_QUERY_ID NUMBER  
)  
RETURN VARCHAR2  
AS  
 RESULT_ID VARCHAR2(256);  
 query_str VARCHAR2(256);  
 BEGIN  
  select CONSTRUCTOR INTO query_str from query_str_ref     
   where QUERY_ID=IN_QUERY_ID;  
  EXECUTE IMMEDIATE query_str INTO RESULT_ID  USING INPUT_ID;  
   RETURN Result_ID;  
END getResultID; 

「RESULT_ID=IN_QUERY_ID;」の後にステートメントを正しく終了していないというエラーが発生します。他のステップが欠けているのではないかと思います。

4

2 に答える 2

3

Result_ID関数内で変数として宣言していません。

于 2012-06-29T00:45:33.470 に答える
2

良いニュースは、間違っているのはあなたの機能ではないということです。@sebas が作成するように勧めた によると、dbms_output動的に実行しようとしている文字列は次のとおりです。

select FIRST_NAME||LAST_NAME||to_char(BIRTH_DATE,'yyyy/mm/dd') as HOST_ID FROM INPUT_DATA_TABLE WHERE INPUT_ID=NEW:INPUT_ID;

それには2つの問題があります。が偽に見えるため、がNEW:INPUT_IDを引き起こしています。それを削除すると、バインド変数として認識されます。(トリガーから来ているように見えますが、おそらく偶然です)。また、文字列に末尾を付けるべきではありません。それは必要なく、無効な文字エラーで壊れます。ORA-00933NEW:INPUT_IDNEW;execute

したがって、query_str_refエントリを次のように変更すると機能するはずです。

select FIRST_NAME||LAST_NAME||to_char(BIRTH_DATE,'yyyy/mm/dd') as HOST_ID FROM INPUT_DATA_TABLE WHERE INPUT_ID=:INPUT_ID
于 2012-06-29T19:27:19.707 に答える