我正在尝试生成一些更复杂的东西。为了没有很多查询和维护点,我们的想法是使用视图。
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'
,则返回成功。有关如何解决该错误并使用此方法的任何想法?
答案 0 :(得分:2)
您的声明
sQuery := REPLACE(sView, '''#VARIABLE_FIX''', :P1_ITEM);
的引号太多-无需转义引号,因为您已经在视图定义中包含了这些引号。将该行替换为
sQuery := REPLACE(sView, '#VARIABLE_FIX', :P1_ITEM);
你很好。于19.1。验证。 但是,我可能会选择Dan的解决方案,并将查询放入带有功能的程序包中。这比查询数据字典中的视图定义透明得多。