您可以尝试这样的事情,如果您需要更多信息,您必须提供更多详细信息。
为唯一编号创建一个序列。
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