salida resueltos procedimientos procedimiento parametros funciones example ejemplos ejecutar developer con almacenado oracle plsql cursor ora-00942

resueltos - pl sql oracle



Oracle PLSQL: declare un cursor en una tabla no existente (3)

Deberías poder definir tu cursor así:

DECLARE c SYS_REFCURSOR; BEGIN OPEN c FOR ''SELECT * FROM dual''; CLOSE c; END;

También puedes vincular argumentos:

OPEN c FOR ''SELECT * FROM dual WHERE DUMMY = :1'' USING ''X'';

Para obtener más información, consulte la documentación de Oracle de la declaración OPEN-FOR .

Ejemplo usando un procedimiento almacenado

CREATE OR REPLACE PROCEDURE test IS c SYS_REFCURSOR; BEGIN OPEN c FOR ''SELECT * FROM fdfdfdfdfd''; CLOSE c; END; /

Quiero declarar un cursor en una tabla que no existe. Por supuesto, mi procedimiento no compila.

Esta tabla es una tabla temporal y se crea mediante un proceso previo. Existirá en tiempo de ejecución, pero en tiempo de compilación es otra historia.

Para mis selecciones / actualizaciones y otras operaciones DML, he usado

EXECUTE IMMEDIATE ''operation from tmp_table''

pero no puedo encontrar una solución para los cursores.

¿Hay alguna manera?

Básicamente, quiero que esto compile

drop table test; /*from this on should compile*/ DECLARE cursor c is select * from test; BEGIN for reg in c LOOP /*...*/ END LOOP; END;

actualizar

Hasta ahora no compilando:

SQL> declare 2 c sys_refcursor; 3 BEGIN 4 open c for ''select * from pepito''; -- ''pepito'' does not exist 5 close c; 6 end; 7 / declare * ERROR at line 1: ORA-00942: table or view does not exist ORA-06512: at line 4

Debería usar CREATE PROCEDURE, gracias.

Gracias por adelantado.


La creación de tablas temporales como se requiere generalmente no se considera una buena práctica en Oracle, donde las tablas temporales globales son mejores y no causarían este problema.


Puede usar DBMS_SQL para obtener incluso más flexibilidad que el método del cursor de referencia descrito por Peter Lang. Pero también significa más trabajo.