1

含むテーブルがあります(username-primarykey,password,age,gender);

のような手順を作成する必要がありますprocedure(username in varchar,s_cursor out sys_refcursor);

プロシージャは、行 ( ) をカーソルとして受け入れusernameて返す必要があります。where username=in parameter

規則: カーソルは、それが提供するレコードと一緒に一意のシーケンスを持っている必要があります。例:(unique no(sequence),username ,password,age,gender)

プロシージャが uniqueno(sequence) とともに単一のレコードを返す必要があるたびに

4

1 に答える 1

7

このようなことを試すことができます。さらに情報が必要な場合は、詳細を提供する必要があります。

固有番号のシーケンスを作成します。

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

パラメータとパラメータsys_refcursorとして返すプロシージャを作成しますOUTemp_idIN

    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 に答える