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
asOUT
参数和emp\u id
asIN
参数
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
asOUT
参数和emp\u id
asIN
参数
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我可以读入,但我无法以唯一的(序列)编号存储到游标中。每次读取记录时您想要不同的编号吗?这是什么样的规则?每次从表中检索的记录都必须以唯一的编号(即序列号)存储到游标中。