我的表格包含(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)
每次程序都应该返回单个记录以及uniqueno(序列)
答案 0 :(得分:4)
如果您需要更多信息,可以尝试这样的事情。
为唯一编号
创建序列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