【发布时间】:2015-08-07 13:58:25
【问题描述】:
我很抱歉,因为这个问题似乎很简单。 我有这个功能:
CREATE OR REPLACE FUNCTION Costs_MK (VIEWNAME IN VARCHAR2 , WHERE_CLAUSE IN VARCHAR2)
RETURN VARCHAR2
IS
v_Costs VARCHAR2 (500);
BEGIN
Select Listagg(Costs, ';' ) WITHIN GROUP (ORDER BY Costs)
into v_Costs
from (select distinct (Costs)
from VIEWNAME
where WHERE_CLAUSE);
RETURN v_Costs;
END Costs_MK;
但是我收到错误消息:
错误(13,30):PL/SQL:ORA-00920:无效的关系运算符
我什至无法编译它。如果我使用 Viewname 和 Where_clause 的确切值,我会得到想要的结果。
我做错了什么?
/edit: 第 13 行是
from VIEWNAME
/编辑#2: 多谢你们。你帮了我很多。第一步我没有考虑动态sql,所以感谢你的复习;)。
【问题讨论】:
-
from VIEWNAME你不能在这里使用变量......你需要使用动态 SQL ......这立即引出了一个更大的问题:“你想做什么?” .. 因为为这样的事情诉诸动态 SQL 通常可能是设计不佳的标志 .. ;) (并非总是 .. 但经常) -
where WHERE_CLAUSE如果没有动态 SQL,这也不会像这样工作......(见上文) -
谢谢。我正在尝试在我的过程中使用返回值。我在运行时在我的过程中获得了 Viewname,我想用 viewname 调用该函数,然后得到我的返回值。否则我将不得不编写 5 个函数来获取值。与“where WHERE_CLAUSE”相同的问题。有什么解决方案的建议吗?这么动态的SQL?
-
我可能会使用 5 个函数 .. 每个视图 1 个 ... 但这只是我 .. :) 其他人可能不同意。
-
where 子句有多“动态”?视图总是一样的吗?
标签: oracle plsql stored-functions