1

我正在尝试创建一个基于输入动态运行查询的函数。函数的第一个输入 input_id 是动态查询的参数。第二个输入 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

好消息是,错的不是你的函数。根据dbms_output@sebas 鼓励您生成的内容,您尝试动态执行的字符串是:

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;

这有两点不对。NEW:INPUT_ID导致,ORA-00933因为NEW看起来很虚假;如果您删除它,它将识别:INPUT_ID为绑定变量。(NEW看起来它来自触发器,但可能是巧合)。而且你不应该;在字符串上有尾随,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 回答