Oracle - urgente: Tablas temporales

 
Vista:

urgente: Tablas temporales

Publicado por Aproblemado (5 intervenciones) el 28/09/2004 21:38:05
Necesito que me ayuden a crear una tabla temporal dentro de un PL.
Mi problema es que tengo dos cursores, uno obtiene los datos que el otro ocupara para filtar la informacion que necesito devolver dentro de un ref cursor. La solucion que veo es la creacion de una tabal temporal con dichoe registros cuando se recorra el primer cursor y luego realizar un select de la tabla temporal para cargar el ref cursor, pero nunca he trabajado con tablas temporales, si alguien me puede ayudar se lo agradeceria muchisimo.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:urgente: Tablas temporales

Publicado por Jorge-DBA (123 intervenciones) el 06/10/2004 19:37:13
Aproblemado:

Se soluciona tu problema con el DYNAMIC SQL con EXECUTE IMMEDIATE

ejemplo:

DECLARE
sql_stmt VARCHAR2(200);
plsql_block VARCHAR2(500);
emp_id NUMBER(4) := 7566;
salary NUMBER(7,2);
dept_id NUMBER(2) := 50;
dept_name VARCHAR2(14) := 'PERSONNEL';
location VARCHAR2(13) := 'DALLAS';
emp_rec emp%ROWTYPE;
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';

sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;

sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;

plsql_block := 'BEGIN emp_pkg.raise_salary(:id, :amt); END;';
EXECUTE IMMEDIATE plsql_block USING 7788, 500;

sql_stmt := 'UPDATE emp SET sal = 2000 WHERE empno = :1
RETURNING sal INTO :2';
EXECUTE IMMEDIATE sql_stmt USING emp_id RETURNING INTO salary;

EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num'
USING dept_id;

EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE TRUE';
END;
Jorge-DBA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar