1

我有一个表包含(username-primarykey,password,age,gender);

必须创建类似的程序procedure(username in varchar,s_cursor out sys_refcursor);

过程必须接受username并返回行 ( where username=in parameter) 作为游标。

规则:光标必须并且应该具有唯一的序列 no 以及它给出的记录。例子:(unique no(sequence),username ,password,age,gender)

每次过程都应返回单个记录以及唯一编号(序列)

4

1 回答 1

7

您可以尝试这样的事情,如果您需要更多信息,您必须提供更多详细信息。

为唯一编号创建一个序列。

CREATE SEQUENCE emp_seq
  MINVALUE 1
  MAXVALUE 999999999999999999999999999
  START WITH 1
  INCREMENT BY 1
  CACHE 20;

创建一个sys_refcursor作为OUT参数和emp_id作为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;
    /

并从 sqlplus 执行该过程

variable usercur refcursor;

DECLARE

user_id  YOURTABLE.USERNAME%TYPE;

BEGIN
user_id := 'JON';
get_employees(user_id,:usercur);

END;
/

print usercur

更新 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

要从 SQL Developer 执行过程,请执行以下操作

var usercur refcursor
exec procedure_sample('AU',:usercur)
print usercur
于 2012-11-22T18:35:18.400 回答