Consulta PLSQL

jsaiz
19 de Mayo del 2010
Hola,
Tengo el siguiente procedimiento y necesito saber como pasar la variable NOMBRE_TABLA a la última select. Es decir, en la primera select despues de BEGIN obtengo el nombre de la tabla que necesito para la ultima select (dentro del FOR) y no se como pasarle esa variable. Si sabeis como hacerlo o se os ocurrre alguna otra forma y me quiere ayudar...

CREATE OR REPLACE PROCEDURE PROCEDIMIENTO1 AS
CURSOR C1 IS SELECT C1, C2,...Cn FROM TABLA1...;
NOMBRE_TABLA VARCHAR(50);
BEGIN
SELECT C1 INTO NOMBRE_TABLA FROM TABLA2 WHERE...;

FOR I IN C1 LOOP
SELECT C1, C2.. FROM NOMBRE_TABLA WHERE...;

END LOOP

END;
/

Muchas gracias
Un saludo

Leandro
19 de Mayo del 2010
Si describes un poco mas cual es el problema y hacia donde quieres llegar, podria ayudarte.
Gracias.

Saludos.

Leonardo
20 de Mayo del 2010
El código PlSql, debe poder ser compilado, para lo cual, los objetos referenciado deben ser conocidos en tiempo de compilación.

Al usar TableName como objeto variable, no podemos usar sentencias Sql clásicas sino que tendremos que recurrir a Sql-Dinámico, es decir la sentencia se verificara cuando se ejecute el procedimento.

Existen bastantes variantes de Sql-Dinámico. Unas mediante Execute Inmediate, otras mediante el package Dbms_Sql.

Lo mejor es que veas algunos ejemplos:
http://www.orafaq.com/wiki/PL/SQL_FAQ#Can_one_use_dynamic_SQL_statements_from_PL.2FSQL.3F
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm

jsaiz
25 de Mayo del 2010
Hola Leandro,
Lo primero, muchas gracias por tu interes, veras, el problema es que utilizo tablas cuyo nombre es dinámico. Cada día una aplicación genera una tabla cuyo nombre contiene la fecha del día que es gerada.
ejemplo A100525_AJOB.
Y necesito ejecutar un proceso automatico que cada día haga una extracción de la tabla del dia correspondiete. Por tanto necesito pasar en la última select del post original el nombre de la tabla correspondiente a ese dia. Nunca he trabajado con sql-dinamico y revisando los links que me has enviado no consigo ver la forma de haverlo. ¿Me puedes echar una mano?

Muchas gracias
Un Saludo