Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

[SOLUCIONADO] Stored dentro de un cursor

Estas en el tema de Stored dentro de un cursor en el foro de Oracle en Foros del Web. Debo llenar una tabla con datos de otras tablas, pero extraídas de un rango de tablas. Para obtener el rango de tablas utilizo un cursor. ...
  #1 (permalink)  
Antiguo 19/03/2013, 12:35
 
Fecha de Ingreso: octubre-2011
Ubicación: Merlo
Mensajes: 18
Antigüedad: 13 años
Puntos: 1
Respuesta: llamar un stored dentro de un cursor

Debo llenar una tabla con datos de otras tablas, pero extraídas de un rango de tablas.
Para obtener el rango de tablas utilizo un cursor.
Luego realizo un insert as select, sobre el registro obtenido del cursor.
El problema es que creo que tengo algo mal en la sentencia sql.

te paso el código:


Código:
create or replace procedure update_potencia 

as CURSOR from_table

  IS  SELECT table_name
    FROM user_tables
    WHERE table_name LIKE '%AVE';
    
v_from_table from_table%ROWTYPE;
FROM_REC USER_TABLES.TABLE_NAME%TYPE;

source_cursor INTEGER;

ignore INTEGER;

BEGIN
        OPEN from_table;
            LOOP
                FETCH from_table INTO FROM_REC;
                EXIT WHEN from_table%NOTFOUND;
                source_cursor := DBMS_SQL.OPEN_CURSOR ;
                                DBMS_SQL.PARSE(source_cursor,  
                                                    'INSERT INTO noa_ave_max_pot  (Pointnumber, 
                                                    hora_max_rtc, valor_max_rtc, 
                                                    hora_noa, valor_noa, 
                                                    hora_max_noa, valor_max_noa ) 
                                                    (SELECT a.pointnumber pointnumber, 
                                                    a.utctimemax hora_max_rtc, valor_max_rtc a.value, 
                                                    b.utctime hora_ave, b.VALUE valor_ave,
                                                    c.utctime hora_max_ave, c.VALUE value_max_ave
                                                    FROM rtc_estaciones a, '  || v_from_table.table_name ||' b, 
                                                                           '  || v_from_table.table_name ||' c
                                                    WHERE A.value IN (SELECT MAX (VALUE)
                                                                        FROM rtc_estaciones )
                                                    AND C.VALUE IN (SELECT MAX (VALUE)
                                                                    FROM '  || v_from_table.table_name ||'
                                                                    WHERE utctime BETWEEN  SYSDATE - 3 AND SYSDATE - 2)
                                                    AND A.utctimemax  BETWEEN SYSDATE - 3 AND SYSDATE - 2
                                                    AND B.utctime  BETWEEN SYSDATE - 3 AND SYSDATE - 2
                                                    AND C.utctime  BETWEEN SYSDATE - 3 AND SYSDATE - 2
                                                    AND a.utctimemax = b.utctime)',DBMS_SQL.NATIVE );
                                                   
                                                    
                DBMS_OUTPUT.put_line ('Last Error: ' || DBMS_SQL.LAST_ERROR_POSITION ());
                DBMS_OUTPUT.put_line (FROM_REC);
                                                   
                ignore := DBMS_SQL.EXECUTE (source_cursor);
                
                  
                DBMS_SQL.CLOSE_CURSOR (source_cursor);

            END LOOP;
 
        CLOSE from_table;
                      

END;
Al ejecutar me sale el error:


SQL> exec update_potencia;
BEGIN update_potencia; END;

*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
ORA-06512: at "SYS.DBMS_SYS_SQL", line 909
ORA-06512: at "SYS.DBMS_SQL", line 39
ORA-06512: at "TEST.UPDATE_POTENCIA", line 22
ORA-06512: at line 1

Podrás darme un tip para resolver esto?, no puedo ver los paquetes de sys dele error, ya que estan wrappeados.

muchas gracias!

Última edición por gnzsoloyo; 19/03/2013 a las 15:16 Razón: Postea pregunta propia en tema ajeno
  #2 (permalink)  
Antiguo 20/03/2013, 11:35
 
Fecha de Ingreso: octubre-2011
Ubicación: Merlo
Mensajes: 18
Antigüedad: 13 años
Puntos: 1
Respuesta: Stored dentro de un cursor

solucionado.

El query estaba mal formado.

Código SQL:
Ver original
  1. (SELECT a.pointnumber pointnumber, a.utctimemax hora_max_rtc, valor_max_rtc a.VALUE,


reemplazado por:


Código SQL:
Ver original
  1. (SELECT a.pointnumber pointnumber, a.utctimemax hora_max_rtc, a.VALUE valor_max_rtc ,

Última edición por gnzsoloyo; 20/03/2013 a las 11:54 Razón: Agrego la solución.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:53.