如何在 Oracle SQL 传递动态查询的输入?

标签: sql Oracle
发布时间: 2017/4/15 19:07:45
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想创建一个函数动态运行基于输入的查询。对于函数,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;"我想知道是否我想一些其他步骤。

解决方法 1:

好消息是,它不是你是错误的函数。根据 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
赞助商