【发布时间】:2017-08-11 08:06:36
【问题描述】:
我有返回sys_refcursor的函数我给你我的代码示例。
function myfunc( p_city IN VARCHAR2,
p_order IN VARCHAR2)
RETURN SYS_REFCURSOR IS
v_result SYS_REFCURSOR;
begin
OPEN v_result FOR WITH all_prb AS(
select * from tableA ta inner join tableB tb)
'select * from all_prb ff where (:p_city is null or (LOWER(ff.city) like ''%''||:p_city||''%'') ) order by ' || p_order || 'asc' using p_city,p_city;
return v_result;
end myfunc;
当我试图编译它时,我有ORA-00928: missing SELECT keyword,这个错误针对我有动态sql'select * from all_prb ff where ...'的行
如何修复它以及如何编写正确的动态 sql?我正在编写用于订购的动态 sql。
【问题讨论】:
-
你为什么使用
with子句,为什么没有连接条件? (你发布的代码得到的是 ORA-00905,而不是 ORA-00928,所以这似乎不是你实际运行的......) -
我尝试立即执行 ('select * from all_prb ff where (:p_city is null or (LOWER(ff.city) like ''%''||:p_city||''%'' ) ) order by ' || p_order || 'asc' using p_city,p_city;) 也没有说我是第一次写这样的动态 sql 所以如果你知道你能给我写代码解决方案我该怎么写?跨度>
-
您已将光标的一部分创建为静态,部分创建为动态。它必须全部是静态或全部是动态 sql - 即您需要在动态 sql 中包含 with 子句。
-
Boneist 我修复了所有问题,只是当我尝试在动态 sql 中调用其他函数时,它会写入无效标识符“functionName”,当我在动态 sql 中删除此调用时,一切正常.你能帮我如何在这段代码中调用函数吗?
标签: oracle