SQL 프로시저 내의 커서 변수 사용

커서 변수 사용을 보여주는 예제를 참조하면 커서 변수를 사용할 수 있는 방법 및 위치를 잘 알 수 있습니다.

이 예제에서는 다음을 보여줍니다.
  • ROW 데이터 유형을 작성할 CREATE TYPE문
  • 행 데이터 유형 스펙에 기반한 명백히 유형이 지정된 커서를 작성할 CREATE TYPE문
  • 출력 커서 매개변수가 있는 프로시저를 작성할 CREATE PROCEDURE문
  • 다른 프로시저를 호출하고 커서를 입력 매개변수로 전달하는 프로시저를 작성할 CREATE PROCEDURE문
이 예제를 실행하는 전제조건으로 SAMPLE 데이터베이스가 있어야 합니다. 샘플 데이터베이스를 작성하려면 Db2® 명령 창에서 다음 명령을 발행하십시오.

db2sampl;
다음은 SQL 프로시저 내에서 커서 변수 사용의 코어 기능을 보여주는 예제 CLP 스크립트입니다. 스크립트에는 행 데이터 유형 정의, 커서 유형 정의 및 두 개의 SQL 프로시저 정의가 포함됩니다. P_CALLER 프로시저에는 커서 변수 정의 및 P 프로시저에 대한 호출이 포함됩니다. P 프로시저는 커서를 정의하고 열며 출력 매개변수 값으로 전달합니다. P_CALLER 프로시저는 커서 매개변수를 수신하고 커서 값을 로컬 변수에 페치한 후 로컬 변수 값에 기반한 두 개의 출력 매개변수 값 edlvellastname을 설정합니다.
--#SET TERMINATOR @
update command options using c off @
connect to sample @

CREATE TYPE myRowType AS ROW (edlevel SMALLINT, name VARCHAR(128))@

CREATE TYPE myCursorType AS myRowType CURSOR@

CREATE PROCEDURE P(IN pempNo VARCHAR(8), OUT pcv1 SYSCURSOR)
LANGUAGE SQL
BEGIN
  SET pcv1 = CURSOR FOR SELECT edlevel, lastname FROM employee WHERE empNo = pempNo;
  OPEN pcv1;

END@

CREATE PROCEDURE P_CALLER( IN pempNo VARCHAR(8) ,
                           OUT edlevel SMALLINT,
                           OUT lastname VARCHAR(128))
LANGUAGE SQL
BEGIN
  DECLARE rv1 myRowType;
  DECLARE c1 SYSCURSOR;

  CALL P (pempNo,c1);
  FETCH c1 INTO rv1;
  CLOSE c1;

  SET edlevel = rv1.edlevel;
  SET lastname = rv1.name;

END @

CALL P_CALLER('000180',?,?) @
이 스크립트가 실행되면 다음 출력이 생성됩니다.
update command options using c off 
DB20000I  The UPDATE COMMAND OPTIONS command completed successfully.

connect to sample 

   Database Connection Information

 Database server        = DB2/LINUXX8664 9.7.0
 SQL authorization ID   = REGRESS5
 Local database alias   = SAMPLE


CREATE TYPE myRowType AS ROW (edlevel SMALLINT, name VARCHAR(128)) 
DB20000I  The SQL command completed successfully.

CREATE TYPE myCursorType AS CURSOR RETURNS myRowType 
DB20000I  The SQL command completed successfully.

CREATE PROCEDURE P(IN pempNo VARCHAR(8),OUT pcv1 SYSCURSOR)
LANGUAGE SQL
BEGIN
  SET pcv1 = CURSOR FOR SELECT edlevel, lastname FROM employee WHERE empNo = pempNo;
  OPEN pcv1;

END
DB20000I  The SQL command completed successfully.

CREATE PROCEDURE P_CALLER( IN pempNo VARCHAR(8) ,
                           OUT edlevel SMALLINT,
                           OUT lastname VARCHAR(128))
LANGUAGE SQL
BEGIN
  DECLARE rv1 myRowType;
  DECLARE c1 SYSCURSOR;

  CALL P (pempNo,c1);
  FETCH c1 INTO rv1;
  CLOSE c1;

  SET EDLEVEL = rv1.edlevel;
  SET LASTNAME = rv1.name;

END 
DB20000I  The SQL command completed successfully.

CALL P_CALLER('000180',?,?) 

  Value of output parameters
  --------------------------
  Parameter Name  : EDLEVEL
  Parameter Value : 17

  Parameter Name  : LASTNAME
  Parameter Value : SCOUTTEN

  Return Status = 0