【发布时间】:2016-08-09 19:53:12
【问题描述】:
我尝试创建一个 Oracle 函数,其中表名、列名和字符串是动态参数:
CREATE OR REPLACE FUNCTION MYSCHEMA.myFunctionName(
tableName in nvarchar2,
columnName in nvarchar2,
whereStr in nvarchar2)
RETURN nvarchar2
IS nActive nvarchar2(2000);
BEGIN
declare
querystr nvarchar2(2000) ;
result nvarchar2(2000);
begin
querystr :='
select listagg('+columnName+','+','+') within group (order by '+columnName+')
from '+tableName+' where 1 = 1 '+whereStr+';';
EXECUTE IMMEDIATE querystr
INTO result;
nActive := result;
RETURN ( nActive );
end;
END ;
/
但它给了我错误“警告:已编译但存在编译错误”。
我做错了什么?
【问题讨论】:
-
使用
show errors或查询user_errors视图来查看实际的编译错误。 (SQL Developer 也有一个显示它们的窗格)。您需要查看动态字符串中的非转义引号和连接字符(||不是+);但为什么你的 listagg 有三个参数?
标签: oracle plsql dynamic-sql