标签: ref-cursor

如何使用RefCursor返回类型测试Oracle存储过程?

我正在寻找关于如何在SQL Developer或Embarcardero Rapid XE2中测试Oracle存储过程的一个很好的解释.谢谢.

oracle stored-procedures ref-cursor rapidsql plsqldeveloper

36
推荐指数
6
解决办法
19万
查看次数

调用返回refcursor的函数

我正在使用Postgresql 8.3并具有以下简单函数,它将返回refcursor 给客户端

CREATE OR REPLACE FUNCTION function_1() RETURNS refcursor AS $$
DECLARE
        ref_cursor REFCURSOR;
BEGIN
        OPEN ref_cursor FOR SELECT * FROM some_table;
        RETURN (ref_cursor);    
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但游标名称由PostgreSQL自动生成

BEGIN;
SELECT function_1();  --It will output the generated cursor name , for example , "<unnamed portal 11>" ;
FETCH 4   from  "<unnamed portal 11>"; 
COMMIT;
Run Code Online (Sandbox Code Playgroud)

此外,明确声明游标名称作为函数的输入参数,如 38.7.3.5所述.返回游标.可以声明我自己的游标名称并使用此游标名称来操作返回的游标而不是Postgresql自动为我生成?如果没有,是否有任何命令可以获取生成的游标名称?

sql postgresql plpgsql cursor ref-cursor

11
推荐指数
2
解决办法
3万
查看次数

如何在Oracle SQL Developer中查看refcursor结果/输出?

可能重复:
从oracle包过程中获取结果的最佳方法/工具
Oracle SQL Developer:在Grid中显示REFCURSOR结果?

我是Oracle SQL Developer的新手.我正在使用Oracle SQL Developer版本3.0.我试图使用以下查询来测试我的SP.

DECLARE
  type output_cursor is ref cursor;
  P_CURSOR output_cursor;
BEGIN
  P_CURSOR := NULL;
  myPackage.mySPTest (  P_NOTIFICATION_ID => 1975357,P_CURSOR => P_CURSOR) ;
END;
Run Code Online (Sandbox Code Playgroud)

当我在我的Oracle SQL Developer中运行上述查询时,我收到一条消息'anonymus block completed'并且没有显示任何结果.

任何人都可以帮助我,如何看到结果.

.

oracle plsql ref-cursor oracle10g oracle-sqldeveloper

10
推荐指数
2
解决办法
8万
查看次数

如何将Oracle引用游标提取到表变量中?

我试图将参考光标中的数据加载到表变量(或数组)中,如果表变量基于现有的%Rowtype但参考光标通过连接多个表来加载,则参考光标可以工作,所以让我试着演示一个例子我想做什么,有些人可以帮助我

--created table
create table SAM_TEMP(
    col1 number null,
    col2 varchar(100) null
);

--created procedure which outputs results from that table

CREATE OR REPLACE
PROCEDURE SP_OUT_RefCur_PARAM(
    C_RESULT OUT SYS_REFCURSOR
) IS
BEGIN
    OPEN C_RESULT FOR 
        SELECT COL1,COL2
        FROM SAM_TEMP;
END SP_OUT_RefCur_PARAM;

--seeing the output works like this
DECLARE 
    REFCUR SYS_REFCURSOR;   
    outtable SAM_TEMP%rowtype ;  
BEGIN 
    SP_OUT_RefCur_PARAM(REFCUR);
    LOOP
        FETCH REFCUR INTO outtable;
        EXIT WHEN REFCUR%NOTFOUND;
        dbms_output.put_line(outtable.col1);
    END LOOP;
    CLOSE REFCUR;
END;


--but when i try to run below script it is giving …
Run Code Online (Sandbox Code Playgroud)

oracle stored-procedures ref-cursor

8
推荐指数
1
解决办法
4万
查看次数

如何使用squirrel在Oracle中使用ref游标调用存储过程

我正在尝试执行我在Toad中使用的相同请求

(存储过程签名是两个varchar2参数和一个REF CURSOR参数)

这是我对Toad的处理方式

variable myCursor refcursor;
EXEC myproc('param1','param2',:myCursor );
print myCursor;
Run Code Online (Sandbox Code Playgroud)

我不知道如何用Squirrel写这个,我必须使用Squirrel.

非常感谢您的回复

拉斐尔

oracle squirrel-sql ref-cursor

6
推荐指数
1
解决办法
2万
查看次数

如何在PL/SQL中关闭返回的游标?

我是PL/SQL的新手,我在学习过程中只需要游标.我一直在看类型的存储过程参数OUT SYS_REFCURSOR,据我所知,其目的是"返回数据"就像C语言中的指针一样.我一直想知道SYS_REFCURSOR如果程序必须打开并且无法关闭它,谁将关闭此参数?(如果程序关闭,OUT SYS_REFCURSOR那么将不会返回任何数据).

另外,我认为,依赖于包含OUT SYS_REFCURSOR参数的存储过程以外的外部函数来关闭游标是不好的设计.有没有办法可以在不使用游标的情况下从存储过程返回表格?

oracle plsql sys-refcursor ref-cursor

6
推荐指数
1
解决办法
8395
查看次数

如何使用Ref Cursor作为C#的Out-parameter调用Oracle函数?

我正在使用一个提供基于Oracle函数的数据库API的产品,我能够通过ODP.NET调用函数.但是,我无法弄清楚,如何调用包含Ref Cursor作为Out-parameter的函数.到目前为止我找到的所有样本都调用带有Out参数的过程或带有Ref Cursor的函数作为返回值.我试图类似地定义参数,但不断得到提供错误数量或类型参数的错误.

这是函数头(显然是混淆的):

FUNCTION GetXYZ(
   uniqueId       IN   somepackage.Number_Type,
   resultItems    OUT  somepackage.Ref_Type)
   RETURN somepackage.Error_Type;
Run Code Online (Sandbox Code Playgroud)

这些是"somepackage"中的类型定义:

SUBTYPE Number_Type IS NUMBER(13);
TYPE Ref_Type IS REF CURSOR;
SUBTYPE Error_Type IS NUMBER;
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的代码:

string sql = "otherpackage.GetXYZ";
var getXYZCmd = OracleCommand oracleConnection.CreateCommand(sql);
getXYZCmd.CommandType = CommandType.StoredProcedure;

getXYZCmd.Parameters.Add("uniqueId", OracleDbType.Int32).Value = uniqueExplosionId;
getXYZCmd.Parameters.Add("resultItems", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
getXYZCmd.Parameters.Add("return_value", OracleDbType.Int32).Direction = ParameterDirection.ReturnValue;
Run Code Online (Sandbox Code Playgroud)

我尝试了以下不同的方法来调用函数(当然一次只能调用一个函数):

var result = getXYZCmd.ExecuteNonQuery();
var reader = getXYZCmd.ExecuteReader();
var scalarResult = getXYZCmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

但是每个都失败并显示错误消息:

Oracle.DataAccess.Client.OracleException: ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments …
Run Code Online (Sandbox Code Playgroud)

oracle function odp.net sys-refcursor ref-cursor

6
推荐指数
1
解决办法
3万
查看次数

CURSOR 和 REF CURSOR 作为 JDBC 数据类型

许多 RDBMS 支持某种“CURSOR”类型。这些类型在从存储过程返回时最有用。Oracle 中的一个例子:

TYPE t_cursor_type IS REF CURSOR;
CREATE PROCEDURE p (c OUT t_cursor_type);
Run Code Online (Sandbox Code Playgroud)

当使用 JDBC 调用此过程时,OracleTypes.CURSOR = -10应使用“JDBC”类型。该类型不属于任何标准,也不会成为 Java 7 中 JDBC 4.1 的一部分。

有谁知道 JSR 人员是否会考虑在将来某个时候将这种类型添加到标准中?或者其他 RDBMS 是否有类似的“供应商特定类型”?

java oracle jdbc ref-cursor

4
推荐指数
1
解决办法
1万
查看次数

如何从存储过程返回空光标?

我有OUT一个存储过程的参数作为REF CURSOR.基于特定条件,我想要返回一个结果集(已经实现).但是当条件失败时如何返回空光标?没有提出异常?只是粘贴伪代码:

IF condition = true THEN
   OPEN OUT_CUR FOR 
   Select Some query

ELSE

   Return empty OUT_CUR

END IF
Run Code Online (Sandbox Code Playgroud)

oracle stored-procedures cursor ref-cursor

4
推荐指数
1
解决办法
1万
查看次数

从 Oracle 函数返回引用游标

我收到错误 - PLS-00382 表达式类型错误。
我想将参考光标作为输出。请让我知道我该怎么做

create or replace function  test_cur
return sys_refcursor
as
  var_ref sys_refcursor;
begin
  open var_ref for
  select item,status
    from item_master  
   where rownum <10;
  return var_ref;
end;


declare
  l_var sys_refcursor;
  l_item varchar2(100);
  l_status varchar2(10);
begin
  l_var:=test_cur;
  open l_var;
  loop
    fetch l_var into  l_item,l_status;
    exit when l_var%notfound;
    dbms_output.put_line(l_item||','||l_status);
  end loop;
end;
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

oracle plsql ref-cursor

4
推荐指数
1
解决办法
2万
查看次数