Oracle SYS\u REFCURSOR作为输出参数

Oracle SYS\u REFCURSOR作为输出参数,oracle,procedure,sys-refcursor,Oracle,Procedure,Sys Refcursor,我有一个表包含(用户名主键、密码、年龄、性别) 必须创建类似于过程的过程(varchar中的用户名,s_cursor out sys_refcursor) 过程必须接受用户名,并将行(其中username=在参数中)返回为光标 规则:游标必须且应该具有唯一的序列号及其提供的记录。 示例:(唯一编号(序列)、用户名、密码、年龄、性别) 每次过程都应该返回单记录和uniqueno(序列)您可以尝试类似的方法,如果您需要更多信息,您必须提供更多详细信息 为唯一编号创建序列 CREATE SEQUENC

我有一个表包含
(用户名主键、密码、年龄、性别)

必须创建类似于
过程的过程(varchar中的用户名,s_cursor out sys_refcursor)

过程必须接受
用户名
,并将行(
其中username=在参数
中)返回为光标

规则:游标必须且应该具有唯一的序列号及其提供的记录。 示例:
(唯一编号(序列)、用户名、密码、年龄、性别)


每次过程都应该返回单记录和uniqueno(序列)

您可以尝试类似的方法,如果您需要更多信息,您必须提供更多详细信息

为唯一编号创建序列

CREATE SEQUENCE emp_seq
  MINVALUE 1
  MAXVALUE 999999999999999999999999999
  START WITH 1
  INCREMENT BY 1
  CACHE 20;
创建一个过程,该过程返回
sys\u refcursor
as
OUT
参数和
emp\u id
as
IN
参数

    CREATE OR REPLACE PROCEDURE get_employee_details (user_id 
                                                      YOURTABLE.USERNAME%TYPE,
                                               emp_cursor   OUT SYS_REFCURSOR)
    AS
    BEGIN
       OPEN emp_cursor FOR
          SELECT emp_seq.NEXTVAL,
                 USERNAME,
                 PASSWORD,
                 AGE,
                 GENDER
            FROM YOURTABLE
           WHERE USERNAME = user_id;
   EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      DBMS_OUTPUT.put_line ('<your message>' || SQLERRM);
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('<your message>' || SQLERRM);
    END get_employee_details;
    /
更新1

我假设您是从sqlplus或Toad调用您的过程,那么您可以按如下方式执行您的过程:

variable dcursor refcursor;

DECLARE


p_arrival  DEFAULT_DETAILS.ARRIVALCOUNTRY%TYPE;

BEGIN
p_arrival := '123';
PROCEDURE_SAMPLE(p_arrival,:dcursor);

END;
/

print dcursor
更新2

要执行SQLDeveloper中的过程,请执行以下操作

var usercur refcursor
exec procedure_sample('AU',:usercur)
print usercur

你可以尝试这样的方法,如果你需要更多的信息,你必须提供更多的细节

为唯一编号创建序列

CREATE SEQUENCE emp_seq
  MINVALUE 1
  MAXVALUE 999999999999999999999999999
  START WITH 1
  INCREMENT BY 1
  CACHE 20;
创建一个过程,该过程返回
sys\u refcursor
as
OUT
参数和
emp\u id
as
IN
参数

    CREATE OR REPLACE PROCEDURE get_employee_details (user_id 
                                                      YOURTABLE.USERNAME%TYPE,
                                               emp_cursor   OUT SYS_REFCURSOR)
    AS
    BEGIN
       OPEN emp_cursor FOR
          SELECT emp_seq.NEXTVAL,
                 USERNAME,
                 PASSWORD,
                 AGE,
                 GENDER
            FROM YOURTABLE
           WHERE USERNAME = user_id;
   EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      DBMS_OUTPUT.put_line ('<your message>' || SQLERRM);
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('<your message>' || SQLERRM);
    END get_employee_details;
    /
更新1

我假设您是从sqlplus或Toad调用您的过程,那么您可以按如下方式执行您的过程:

variable dcursor refcursor;

DECLARE


p_arrival  DEFAULT_DETAILS.ARRIVALCOUNTRY%TYPE;

BEGIN
p_arrival := '123';
PROCEDURE_SAMPLE(p_arrival,:dcursor);

END;
/

print dcursor
更新2

要执行SQLDeveloper中的过程,请执行以下操作

var usercur refcursor
exec procedure_sample('AU',:usercur)
print usercur

你已经走了多远?@Matthewstrobbridge我可以读入,但我无法用唯一的(序列)号存储到游标中。每次读取记录时,你想要一个不同的数字吗?这是什么样的规则?每次从表中检索的记录都必须以唯一的编号(即序列号)存储到游标中。您自己走了多远?@Matthewstrobbridge我可以读入,但我无法以唯一的(序列)编号存储到游标中。每次读取记录时您想要不同的编号吗?这是什么样的规则?每次从表中检索的记录都必须以唯一的编号(即序列号)存储到游标中。