Вы можете попробовать что-то вроде этого, если вам нужна дополнительная информация, вы должны предоставить более подробную информацию.
Создайте последовательность для уникального номера.
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
person
Jacob
schedule
22.11.2012