PL / SQL函数主体从视图返回SQL查询

时间:2019-11-06 10:47:31

标签: oracle plsql oracle-apex oracle-apex-19.1

我正在尝试生成一些更复杂的东西。为了没有很多查询和维护点,我们的想法是使用视图。

create or replace view vw_teste as
Select 1 
from dual
where 1 = '#VARIABLE_FIX';

我想做的是

DECLARE

sQuery VARCHAR2(32767);
sView VARCHAR2(32767);
BEGIN

SELECT a.TEXT
into sView
FROM all_views a 
where a.VIEW_NAME = 'VW_TESTE';

sQuery := REPLACE(sView, '''#VARIABLE_FIX''', :P1_ITEM);

return(sQuery);

END;

返回的错误:

  

“ ORA-20999:解析” ORA-20999中的返回查询结果:失败   解析SQL查询!

ORA-06550:第12行,第23列:ORA-00936:丢失   表达式

我什至将变量sQuery的内容插入到临时表中,结果与视图的内容是正确的。

我使用了参数化视图,但是当我直接在oracle apex中返回查询时,报表的性能要快得多。

如果您通过Squery:= 'Select 1 from dual where 1 =: P1_ITEM',则返回成功。有关如何解决该错误并使用此方法的任何想法

1 个答案:

答案 0 :(得分:2)

您的声明

sQuery := REPLACE(sView, '''#VARIABLE_FIX''', :P1_ITEM);

的引号太多-无需转义引号,因为您已经在视图定义中包含了这些引号。将该行替换为

sQuery := REPLACE(sView, '#VARIABLE_FIX', :P1_ITEM);

你很好。于19.1。验证。 但是,我可能会选择Dan的解决方案,并将查询放入带有功能的程序包中。这比查询数据字典中的视图定义透明得多。