Problema ORACLE procedimiento

Iniciado por .:UND3R:., 25 Noviembre 2015, 21:12 PM

0 Miembros y 1 Visitante están viendo este tema.

.:UND3R:.

Hola a todos, tengo el siguiente procedimiento:

Código (oracle8) [Seleccionar]
create or replace PROCEDURE ordenarFicha
IS
  -- Declaracion de variables locales
  CURSOR cur_ficha IS SELECT * FROM ficha;
  reg_ficha ficha%ROWTYPE;
  var_anio_actual NUMBER(4);
  var_anio_ficha NUMBER(4);
  var_diferencia_anio NUMBER(4);
BEGIN
  -- Sentencias
  var_anio_actual := EXTRACT(YEAR FROM SYSDATE);
 
  OPEN cur_ficha;
 
  LOOP
FETCH cur_ficha INTO reg_ficha;
EXIT WHEN cur_ficha%NOTFOUND;
var_anio_ficha := EXTRACT(YEAR FROM reg_ficha.fecha);
    var_diferencia_anio := (var_anio_actual - var_anio_ficha);
   
    IF var_diferencia_anio > 5 THEN
      execute immediate 'CREATE TABLE FICHA_' || TO_CHAR(var_anio_ficha) || '(ID_FICHA int primary key, NOMBRE VARCHAR2(60 BYTE), APELLID VARCHAR2(60 BYTE), FECHA DATE)';
    END IF;
    DBMS_OUTPUT.PUT_LINE(reg_ficha.nombre);
END LOOP;
 
  CLOSE cur_ficha;
 
EXCEPTION
    WHEN OTHERS THEN
      IF SQLCODE = -955 THEN
        NULL; -- suprime la excepción ORA-00955
      ELSE
         RAISE;
      END IF;
END ordenarFicha;


El problema que me surge es que al ejecutar este, no selecciona todas las filas (SELECT *) de la tabla ficha, pero cuando comento EXECUTE INMEDIATE, si selecciona todo, me baso en la salida de DBMS_OUTPUT.PUT_LINE(reg_ficha.nombre);

espero que alguien me pueda ayudar, saludos.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Carloswaldo

Es solo una idea, pero según el contenido de la tabla ficha ¿no estarías ejecutando varias veces CREATE TABLEs idéndicos?

No creo que solo haya un registro por año en la tabla ficha, si hay por ejemplo 2 registros que sean del 2009 estarías ejecutando CREATE TABLE FICHA_2009 dos veces, y la 2da fallará.

No estoy seguro en ORACLE pero deberías poder hacer un CREATE TABLE IF NOT EXISTS como un workaround para esto, pero la solución verdadera estaría en replantearse cómo haces lo que intentas hacer.