Plsql PL/SQL:从函数返回sys\u refcursor/用另一个函数动态替换请求

Plsql PL/SQL:从函数返回sys\u refcursor/用另一个函数动态替换请求,plsql,oracle11g,Plsql,Oracle11g,我的职能是: CREATE OR REPLACE FUNCTION replaceRequest(mysql IN varchar2) RETURN SYS_REFCURSOR IS opt SYS_REFCURSOR; BEGIN open opt for select * from rteuti; return opt; END replaceRequest; / 这是我的电话: select replaceRequest('foo') from dual; 我希望此请求将返回以下结果:

我的职能是:

CREATE OR REPLACE FUNCTION replaceRequest(mysql IN varchar2)
RETURN SYS_REFCURSOR IS
opt SYS_REFCURSOR;
BEGIN
open opt for select * from rteuti;
return opt;
END replaceRequest;
/
这是我的电话:

select replaceRequest('foo') from dual;
我希望此请求将返回以下结果:

select * from rteuti
事实并非如此,但这个简单的案例足以说明我的问题。我想在不知道列数的情况下用另一个查询替换一个查询(列数是实函数中的一个参数,我设法生成我想要的查询)

在我的实际Oracle PLSQL知识中,SYS_REFCURSOR是返回类似于查询结果的内容的唯一方法(事先不知道列数)

但在实际操作中,它在我的Squirrel客户端或通过JavaJDBC出错而失败。我只得到一行一列的“error”

在PgPL/SQL中,可以这样做。我很惊讶我不能用甲骨文做这件事


PS:通过进一步研究,我发现SYS_REFCURSOR是结果集上的指针,而不是结果集。有没有办法返回结果集或修改我的选择以获得一个结果集?

您试图解决的更高级别任务是什么?我无法修改的库正在执行一些请求,例如:按foo从footable group中选择foo以获得此表中的所有不同值,我需要很多秒,我知道,如果多次请求一次获取一个值,效果会好得多,比如毫秒,所以我尝试用一个或几个查询重新组合数据集,并将其作为一个结果返回。我通过在我的函数中多次请求并构建一个包含所有先前请求的联合请求,来构建一个唯一的请求。这确实很奇怪,因为我做了两次请求,但比原始请求快得多。使用PGPL/SQL(Postgres),流水线数据支持未知数量的列,因此实现起来要容易得多。在PGPL/SQL中,列的结构必须在像select*from MAGICFONATION(参数)这样的请求中描述为f(a varchar,b varchar,c timestamp),因此,返回的确切错误消息是什么?SYS_REFCCURSOR不是标准的JDBC功能,它是JDBC的扩展,请参阅文档:,这里有一个如何处理refcursor的示例(必须使用OracleTypes.cursor类型检索ref_游标,并将其强制转换为jdbc.ResultSet-参见示例)