问题标签 [sys-refcursor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6035 浏览

oracle - 如何在匿名 PL/SQL 块中使用 out 游标参数执行 oracle 过程?

我正在使用 Oracle XE 的 HR 数据库学习 PL/SQL。

我创建了以下存储过程:

我知道如何在 SQL Developer GUI 界面中执行它并查看结果。我还在这里这里Justin Cave那里学到了如何执行它并查看 SQL*Plus 样式的结果,如下所示:

我想在匿名 PL/SQL 块中执行存储过程并在网格中查看结果,但它没有成功。

就像 Justin Cave 所建议的那样,以下执行得很好,但没有显示结果:

以下将失败:

错误消息说:

PLS-00320:此表达式类型的声明不完整或格式错误

我不明白。我一直在其他一些匿名 PL/SQL 块中这样做,并且效果很好。这里的那条线有什么问题?想不通。

0 投票
1 回答
476 浏览

java - Java JDBC - Oracle11g Sys Ref Cursor Vs pl/sql 集合

我想请教专家,从Java应用程序(使用JDBC)从oracle 11g数据库中获取3000-5000条记录的建议是什么。我们的标准是始终调用存储过程。

我做了一些研究,发现 ref cursor 根据 JDBC fetch count 属性对数据库进行多次往返。(在处理引用游标时,有人可以更清楚地了解数据如何存储在 oracle 和 JVM 中的内存中的端到端流程

我认为集合更有效,因为数据从 oracle db 一次性发送给调用者(Java)(使用批量收集)。通过这种方法,我们可以避免从 Java 到 Oracle 服务器的多次网络调用。这是一个真实的假设吗?

感谢你的帮助!

0 投票
0 回答
137 浏览

arrays - 使用 list_agg 从 sys_refcursor 构造 JSON 字符串

谁能告诉我如何在存储过程中使用 list_agg 从 sys_refcusrosr 构造 json?当我这样做时,我得到“字符串连接太长”的错误结果?

创建或替换过程员工(p_employee_num IN NUMBER,p_next_level IN NUMBER,p_record_out OUT SYS_REFCURSOR)

as BEGIN OPEN p_record_out for WITH employee_details as ( Select '{' ||'"EMPLOYEE PARENT NAME"' || employee_parent_level || '",' || '"EMPLOYEE CHILD Name"' || employee_child_level || '} ,' json从员工开始,从employee_child_level = p_employee_num 按之前的employee_child_level = employee_parent_level 和level < (1 +p_next_level) order by level) select '{"company" : [' ||( select listagg( json, ',') 在组内(按 1 排序)来自employee_details ) ||']}' 来自 dual;
最终雇员;

0 投票
0 回答
486 浏览

oracle - ORA-01001 sql 语句中使用的函数中的无效游标错误

当我尝试获取结果时,我在函数 pipe_cursor 中收到 ORA-01001 Invalid Cursor 错误,但我无法弄清楚原因。

类型 T_TBL:

测试包:

测试脚本:

笔记:

如果我将函数称为

有用

我正在尝试在 Oracle Database 11g Release 11.2.0.3.0 - 64bit 上执行此操作

0 投票
1 回答
7185 浏览

.net - 使用带有 C# 的 Dapper 以 refcursor 作为 out 参数调用 Oracle 存储过程的问题,但是 refcursor 作为返回值有效

给定这个 oracle 存储的 proc 包:

而这个包体:

我正在尝试使用 Dapper 调用任一函数。我创建了实现 Dapper.SqlMapper.IDynamicParameters 的 OracleDynamicParameters 类,我在搜索 StackOverflow 后在这篇文章中找到了该类:https ://gist.github.com/vijaysg/3096151

使用以下代码调用 TestReturnRefCursor 存储函数可以正常工作:

但是,当我尝试使用以下代码调用 TestingRefCursorsAsOutParam 存储过程时:

我从 Oracle.ManagedDataAccess.dll 得到一个 OracleException 的详细信息:

我在搜索另一个 stackoverflow 帖子后发现,有时参数如果为 null 则不会绑定,除非您专门将它们的值设置为 DBNull.Value,所以我尝试将添加参数行更改为:

但这没有帮助。

我可以使用常规的 c# oracle 代码调用这个存储过程:

我在这里遗漏了什么,还是 Dapper 无法正常运行?

0 投票
1 回答
55 浏览

plsql - 比较plsql中的refcursors

我们现有的程序已被修改以提高性能。在这种情况下,我们必须确保没有数据不匹配。我们如何比较来自不同这些程序的 2 个 refcursor?

0 投票
2 回答
2380 浏览

oracle - 在另一个过程中使用 sys_refcursor 作为 out 参数调用 SP

我有一个SP

我没有粘贴它的其余部分;上述程序本身就可以正常工作(当然还有正文)

现在我想从另一个存储过程中调用它,并且我想遍历 refcursor。

我正在做的是在编译时声明an_last_cur SYS_REFCURSOR;并调用 ALTERNATE_NAME_LOOKUP 过程。ALTERNATE_NAME_LOOKUP(p_req.LASTNAMEEXP,c_LAST, an_last_cur);但是当我添加以下块时 -

它给出了编译错误 -

我究竟做错了什么?

0 投票
2 回答
2223 浏览

oracle - ORACLE:具有动态查询的游标 - 为游标字段引发错误“无效标识符”

我有一个逻辑来实现我必须使用动态 sql 的地方(列名和 where 子句是动态决定的)。所以这里我的 cursor( emp_ref_cursor) 有一个动态 sql,并且有 3 个 cursor fields( emp_id,emp_name,dept)。

在子句中使用这些游标字段,WHERE我试图在循环中执行另一个动态 sql。Bt oracle 无法识别游标字段并引发类似“ORA-00904:"EMP_REC"."EMP_ID": invalid identifier"虽然我能够emp_rec.emp_id通过DBMS_OUTPUT.

注意:请不要评论代码质量,这不是实际代码。这只是用来描述问题。由于某些与合规性相关的内容,我无法发布实际代码。

0 投票
1 回答
1536 浏览

sql - Oracle 是否关闭从 SELECT 语句中使用的函数返回的 SYS_REFCURSOR?

我需要在数据库中存储一些查询(包中的内部函数),然后从 SQL Developer 调用函数(来自 ORDS),所以我发现您可以从存储的函数中返回 SYS_REFCURSORs 中的查询,如下所示:

稍后,只需像这样在 SQL Developer 中检索数据:

所以我的问题是...

它是否正确?我知道每次我们打开一个游标时,我们都需要显式地关闭它,并且我发现的每个示例都关闭了 PL/SQL 中的 refcursor,并且我需要从 SELECT 语句中获取数据(以便将其解析为 JSON SQL 开发人员)。

我还发现,在 SQLPlus 中,“print”语句在获取所有数据后关闭游标,我的示例中的 SELECT 语句是否也这样做?

0 投票
1 回答
1994 浏览

oracle - Oracle:从 sys_refcursor 返回动态结果集

我需要一个流水线函数,它可以从 sys_refcursor 中返回一个表,其中 sys_refcursor 参数在编译时是未知的。

例如:

或者

我已经阅读了 函数的返回结果集

并尝试修改代码,使其可以接受 sys_refcursor 作为参数而不是字符串 SQL 语句。但是错误发生在该行:

错误消息:无效光标。

您能帮我解决错误或给我提示以解决我的问题吗?

以下是我的代码: