0

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

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',则返回成功。关于如何绕过错误并使用此方法的任何想法?

4

1 回答 1

2

你的陈述

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

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

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

你可以走了。在 19.1 上验证。但是,我可能会选择 Dan 的解决方案,并将查询放在一个带有函数的包中。这比在数据字典中查询视图定义要透明得多。

于 2019-11-06T18:51:56.130 回答