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

Procedimiento pl sql auida

Estas en el tema de Procedimiento pl sql auida en el foro de Oracle en Foros del Web. Hola a todos, espero me puedan ayudar, estoy empezando con pl sql y tengo que hacer un procedimiento que saque datos de una tabla ya ...
  #1 (permalink)  
Antiguo 24/06/2015, 19:48
 
Fecha de Ingreso: junio-2015
Mensajes: 1
Antigüedad: 9 años, 4 meses
Puntos: 0
Procedimiento pl sql auida

Hola a todos, espero me puedan ayudar, estoy empezando con pl sql y tengo que hacer un procedimiento que saque datos de una tabla ya creada, cree otra tabla y guarde los datos sacados en la nueva tabla.
hice un procedimiento y me crea la tabla pero no me guarda los datos.
este es el código:

Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE CREATABLAMENORSAN(E_EDAD INT) IS
  2.     CURSOR C_ESMENOR IS SELECT  IDPER, IDCOM, NOMBRES,APELLIDOS, RUT, EDAD, SEXO, COMUNA, REGION, TEL, MAIL
  3.             FROM TINSCRITOS WHERE COMUNA= 'SANTIAGO';
  4.             V_IDPER NUMBER(3);
  5.             V_IDCOM NUMBER;
  6.             V_NOMBRES VARCHAR(30);
  7.             V_APELLIDOS VARCHAR(30);
  8.             V_RUT VARCHAR(10);
  9.             V_EDAD INT;
  10.             V_SEXO VARCHAR(1);
  11.             V_COMUNA VARCHAR(25);
  12.             V_REGION VARCHAR(85);
  13.             V_TEL VARCHAR(10);
  14.             V_MAIL VARCHAR(35);
  15.             I_SACA VARCHAR(300);
  16.                         I_CREA VARCHAR(300);
  17.  
  18. BEGIN
  19.  
  20.     I_CREA := 'CREATE TABLE TSANTIAGOMENOR(V_IDPER NUMBER(3), V_IDCOM NUMBER, V_NOMBRES VARCHAR(30),
  21.                                            V_APELLIDOS VARCHAR(30), V_RUT VARCHAR(10), V_EDAD INT,
  22.                                            V_SEXO VARCHAR(1), V_COMUNA VARCHAR(25), V_REGION VARCHAR(85),
  23.                                            V_TEL VARCHAR(10), V_MAIL VARCHAR(35))';
  24.        
  25.     EXECUTE IMMEDIATE I_CREA;
  26.     OPEN C_ESMENOR;
  27.     LOOP
  28.         FETCH C_ESMENOR INTO V_IDPER, V_IDCOM, V_NOMBRES, V_APELLIDOS, V_RUT, V_EDAD, V_SEXO, V_COMUNA, V_REGION, V_TEL, V_MAIL;  
  29.         EXIT WHEN C_ESMENOR%NOTFOUND;
  30.         DBMS_OUTPUT.PUT_LINE(V_IDPER||' '||V_IDCOM||' '||V_NOMBRES||' '||V_APELLIDOS||' '||V_RUT||' '||V_EDAD||' '||V_SEXO||' '||V_COMUNA||' '||V_REGION||' '||V_TEL||' '||V_MAIL) ;
  31.         I_SACA := 'INSERT INTO TSANTIAGOMENOR VALUES('||V_IDPER||', '||V_IDCOM||', '||V_NOMBRES||',
  32.                        '||V_APELLIDOS||', '||V_RUT||', '||V_EDAD||',
  33.                        '||V_SEXO||','||V_COMUNA||', '||V_REGION||',
  34.                        '||V_TEL||', '||V_MAIL||')';
  35.         DBMS_OUTPUT.PUT_LINE(I_SACA);
  36.         IF (V_EDAD < E_EDAD) THEN
  37.                  EXECUTE IMMEDIATE I_SACA;
  38.         END IF;
  39.     END LOOP;
  40. END;
  #2 (permalink)  
Antiguo 25/06/2015, 07:26
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Procedimiento pl sql auida

Los problemas pueden ser varios, te enumero los que puedo deducir al vuelo.

1. Problemas en la transacción, la falta de commit en el procedimiento podría implicar que los datos no se guarden.
2. Que la condición del IF no se cumpla.
3. Manejo de excepciones, el procedimiento podría estar dando error y no ejecuta el insert, por ejemplo, el procedimiento solo se puede ejecutar una vez, después de creada la tabla, la siguiente ejecución el procedimiento va a dar error.

Mi recomendación es que hagas un debug para ver donde falla.

Saludos
  #3 (permalink)  
Antiguo 03/07/2015, 10:35
Avatar de Doglas  
Fecha de Ingreso: mayo-2015
Mensajes: 22
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Procedimiento pl sql auida

Creo que es por que te falta el COMMIT, como ya lo dijo MATANGA. Saludos.

Etiquetas: dato, procedimiento, sql, table
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




La zona horaria es GMT -6. Ahora son las 08:33.