P. 1
Apostila Completa Oracle 9i

Apostila Completa Oracle 9i

4.0

|Views: 3,585|Likes:
Published by Willian

More info:

Published by: Willian on Jul 22, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

11/30/2012

pdf

text

original

Uma variável de cursor é um tipo referência. Um tipo referência pode referir-se a
posições diferentes de memória à medida que o programa é executado. A sintaxe para
definir um tipo de variável de cursor é:

TYPE nome_do_tipo IS REF CURSOR [RETURN tipo_de_retorno]

Onde nome_do_tipo é o nome do novo tipo de referência e o tipo_de_retorno é um
tipo de registro que indica os tipos da lista SELECT que por fim retornação pela variável
cursor.

A fim de associar uma variável de cursor com uma instrução SELECT em particular,
a sintaxe OPEN é estendida para permitir que a consulta seja especificada. Veja a sintaxe:

OPEN variável_de_cursor FOR instrução_select;

Exemplo:

SQL> set serveroutput on
SQL> DECLARE
2
TYPE TMeuCursor IS REF CURSOR;
3 v_Cursor TMeuCursor;
4 v_EmpRec emp%ROWTYPE;
5 v_DeptRec dept%ROWTYPE;
6 BEGIN
7 --Utilizar tabela EMP
8
OPEN v_Cursor FOR select * from emp;
9 FETCH v_Cursor INTO v_EmpRec;
10 DBMS_OUTPUT.PUT_LINE(v_EmpRec.empno||'-'||
v_EmpRec.ename);
11 CLOSE v_Cursor;
12 --Utilizar tabela DEPT
13
OPEN v_Cursor FOR select * from dept;
14 FETCH v_Cursor INTO v_DeptRec;
15 DBMS_OUTPUT.PUT_LINE(v_DeptRec.deptno||'-'||
v_DeptRec.dname);

77

16 CLOSE v_Cursor;
17 end;
18/

7369-SMITH
10-ACCOUNTING

PL/SQL procedure successfully completed.

O exemplo abaixo é uma procedure armazenada que seleciona linhas da tabela
classes ou rooms, dependendo da sua entrada.

CREATE OR REPLACE PROCEDURE ShowCursorVariable
(p_Table IN VARCHAR2) AS

TYPE t_ClassesRooms IS REF CURSOR;

v_CursorVar t_ClassesRooms;

v_Department classes.department%TYPE;
v_Course classes.course%TYPE;
v_RoomID rooms.room_id%TYPE;
v_Description rooms.description%TYPE;

BEGIN

IF p_Table = 'classes' THEN
OPEN v_CursorVar FOR
SELECT department, course
FROM classes;
ELSIF p_table = 'rooms' THEN
OPEN v_CursorVar FOR
SELECT room_id, description
FROM rooms;

ELSE

RAISE_APPLICATION_ERROR(-20000,
'Input must be ''classes'' or ''rooms''');

END IF;

LOOP

IF p_Table = 'classes' THEN
FETCH v_CursorVar INTO
v_Department, v_Course;
EXIT WHEN v_CursorVar%NOTFOUND;

INSERT INTO temp_table (num_col, char_col)
VALUES (v_Course, v_Department);

ELSE

FETCH v_CursorVar INTO

78

v_RoomID, v_Description;
EXIT WHEN v_CursorVAR%NOTFOUND;

INSERT INTO temp_table (num_col, char_col)
VALUES (v_RoomID, SUBSTR(v_Description, 1, 60));

END IF;
END LOOP;

CLOSE v_CursorVar;

COMMIT;
END ShowCursorVariable;

79

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->