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

Duda Con Procedimiento

Estas en el tema de Duda Con Procedimiento en el foro de Oracle en Foros del Web. hola amigos del foro: tengo la siguiente duda, quiero insertar datos en una tabla vacia apartir de otra tabla que contiene muchas filas o rows.... ...
  #1 (permalink)  
Antiguo 10/12/2007, 08:54
 
Fecha de Ingreso: septiembre-2005
Mensajes: 41
Antigüedad: 18 años, 6 meses
Puntos: 0
Duda Con Procedimiento

hola amigos del foro:

tengo la siguiente duda, quiero insertar datos en una tabla vacia apartir de otra tabla que contiene muchas filas o rows.... osea debo crear algun procedimiento
o funcion que me permita realizar esto pero no se de que manera empezar

estas son las estructuras de las tablas

CREATE TABLE MOV_1
(
ID_MOVIMIENTOS_MES NUMBER,
FECHA DATE,
CANTIDAD NUMBER,
TOTAL NUMBER,
TIPO_ENTREGA VARCHAR2(2),
ID_ARTICULOS_UNIDAD NUMBER,
ID_TIPO_MOV NUMBER,
N_FACTURA VARCHAR2(20),
ORDEN_COMPRA VARCHAR2(20)
);


y la idea es q mensualmente estos datos deben insertarse en la otra tabla llamada mov_2

CREATE TABLE MOV_2
(
ID_MOVIMIENTOS_MES NUMBER,
FECHA DATE,
CANTIDAD NUMBER,
TOTAL NUMBER,
TIPO_ENTREGA NUMBER,
FECHA_TRASPASO DATE,
N_FACTURA VARCHAR2(20),
ORDEN_COMPRA VARCHAR2(20)
);

entonces una ves que se insertaron los datos en la tabla de mov_2

la tabla de mov_1 debe quedar vacia!!!! y listo...... pero que debo realizar un procedimiento cursor o funcion....me podriar dar algun ejemplo por ahi de alguien que alla hecho algo parecido....de antemano muchas gracias
  #2 (permalink)  
Antiguo 10/12/2007, 09:57
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: Duda Con Procedimiento

insert into CREATE TABLE MOV_2 select * from CREATE TABLE MOV_1;
truncate table CREATE TABLE MOV_1;

listo!
  #3 (permalink)  
Antiguo 10/12/2007, 10:28
 
Fecha de Ingreso: septiembre-2005
Mensajes: 41
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Duda Con Procedimiento

Cita:
Iniciado por seyko Ver Mensaje
insert into CREATE TABLE MOV_2 select * from CREATE TABLE MOV_1;
truncate table CREATE TABLE MOV_1;

listo!


la idea es realizar esto con un procedimiento o funcion en la base de datos eso no sirve!!!!!! ademas las tablas se llaman mov1 y mov2!!!!
  #4 (permalink)  
Antiguo 10/12/2007, 12:06
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Re: Duda Con Procedimiento

Hola,

Antes que nada debo decir que como todo foro o comunicacion escrita, es dificil establecer el tono en que los usuarios escriben, pero tambien existen signos que puede darnos una idea de la expresion escrita. Como por ejemplo ESCRIBIR EN MAYUSCULAS implica o da la idea de estar gritando, en tu caso, y a modo de consejo digo, deberias cuidar el exceso de signos "!!!!", porque pueden dar a entender enojo.

Cita:
la idea es realizar esto con un procedimiento o funcion en la base de datos eso no sirve!!!!!!
Si una respuesta no te parece adecuada, pide por una aclaracion, y no exclames "eso no sirve!!!".

Cita:
ademas las tablas se llaman mov1 y mov2!!!!
Si hay algun error de tipeo en la respuesta, adaptalo tu a tu codigo, no demandes una respuesta libre de errores tipograficos o de copiar y pegar.

Dicho lo anterior, paso a la respuesta.

Código:
SQL> create or replace procedure p1
  2  as
  3  begin
  4  insert into mov_2
  5  select
  6   id_movimientos_mes,
  7   fecha,
  8   cantidad,
  9   total,
 10   tipo_entrega,
 11   null,
 12   n_factura,
 13   orden_compra
 14  from mov_1;
 15  execute immediate 'truncate table mov_1';
 16  delete from mov_1;
 17  end;
 18  /

Procedure created.
1. Presta especial antecion a que puse en el procedimiento dos opciones un DELETE y un TRUNCATE, elige la que mas te guste y ya estas listo para la tarea.
2. Presta especial atencion a que las columnas de las tablas no son iguales, por lo tanto perderas datos en el paso de filas de una tabla a la otra.

Saludos
  #5 (permalink)  
Antiguo 10/12/2007, 13:00
 
Fecha de Ingreso: septiembre-2005
Mensajes: 41
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Duda Con Procedimiento

Cita:
Iniciado por matanga Ver Mensaje
Hola,

Antes que nada debo decir que como todo foro o comunicacion escrita, es dificil establecer el tono en que los usuarios escriben, pero tambien existen signos que puede darnos una idea de la expresion escrita. Como por ejemplo ESCRIBIR EN MAYUSCULAS implica o da la idea de estar gritando, en tu caso, y a modo de consejo digo, deberias cuidar el exceso de signos "!!!!", porque pueden dar a entender enojo.



Si una respuesta no te parece adecuada, pide por una aclaracion, y no exclames "eso no sirve!!!".



Si hay algun error de tipeo en la respuesta, adaptalo tu a tu codigo, no demandes una respuesta libre de errores tipograficos o de copiar y pegar.

Dicho lo anterior, paso a la respuesta.

Código:
SQL> create or replace procedure p1
  2  as
  3  begin
  4  insert into mov_2
  5  select
  6   id_movimientos_mes,
  7   fecha,
  8   cantidad,
  9   total,
 10   tipo_entrega,
 11   null,
 12   n_factura,
 13   orden_compra
 14  from mov_1;
 15  execute immediate 'truncate table mov_1';
 16  delete from mov_1;
 17  end;
 18  /

Procedure created.
1. Presta especial antecion a que puse en el procedimiento dos opciones un DELETE y un TRUNCATE, elige la que mas te guste y ya estas listo para la tarea.
2. Presta especial atencion a que las columnas de las tablas no son iguales, por lo tanto perderas datos en el paso de filas de una tabla a la otra.

Saludos



bueno viejo! entonces tu dices que con ese procedemiento se puede realizar lo que yo deseo pero no es asi ya que el procedimiento que tu describes carece de cursor o algun loop que recorra la tabla mov_1 yo estoy realizando algo como esto pero no logro compilar


CREATE OR REPLACE PROCEDURE ABASTEC.INSERTA_MOV IS
CURSOR INSERTA IS
SELECT id_movimientos_mes, fecha, cantidad, total, tipo_entrega, n_factura, orden_compra
FROM MOVIMIENTOS_MES
ORDER BY id_movimientos_mes;

v_id_mov MOVIMIENTOS_MES.id_movimientos_mes%type;
v_fec MOVIMIENTOS_MES.fecha%type;
v_cant MOVIMIENTOS_MES.cantidad%type;
v_tot MOVIMIENTOS_MES.total%type;
v_ti_ent MOVIMIENTOS_MES.tipo_entrega%type;
v_n_fact MOVIMIENTOS_MES.n_factura%type;
v_or_com MOVIMIENTOS_MES.orden_compra%type;

begin

open inserta;
fetch inserta into v_id_mov, v_fec, v_cant, v_tot, v_ti_ent, v_n_fact, v_or_com;
while inserta%found
loop

insert into movimiento_historico
(ID_MOVIMIENTOS_MES, FECHA, CANTIDAD,
TOTAL, TIPO_ENTREGA, FECHA_TRASPASO,
N_FACTURA, ORDEN_COMPRA)

values(v_id_mov, v_fec, v_cant, v_tot, v_ti_ent, sysdate, v_n_fact, v_or_com);

end loop;
close inserta;
commit;
--truncate table movimientos_mes;
end;
/

pero tengo problemas con la fecha ya que en el campo fecha de la tabla mov_2 necesito la fecha en que se realizo el proceso. no logro que compile por toad me da un error
  #6 (permalink)  
Antiguo 10/12/2007, 13:14
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Re: Duda Con Procedimiento

Hola,

Cita:
...entonces tu dices que con ese procedemiento se puede realizar lo que yo deseo pero no es asi ya que el procedimiento que tu describes carece de cursor o algun loop que recorra la tabla mov_1...
1. El procedimiento que publique pasa los datos de una tabla a la otra sin problemas.
2. Si no lo pruebas, no sabras si funciona o no.
3. Te sugiero que leas los manuales, en especial la parte donde explica la sentencia INSERT en http://download.oracle.com/docs/cd/B...htm#LNPLS01325,
dado que no necesitas un cursor para pasar los datos de una tabla a otra.

Saludos
  #7 (permalink)  
Antiguo 10/12/2007, 13:25
 
Fecha de Ingreso: septiembre-2005
Mensajes: 41
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Duda Con Procedimiento

entonces el procedimiento que he creado no sirve para nada?
  #8 (permalink)  
Antiguo 10/12/2007, 13:33
 
Fecha de Ingreso: septiembre-2005
Mensajes: 41
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Duda Con Procedimiento

ademas el ejemplo que has puesto me da lo siguiente con TOAD

PLS-00103: Encountered the symbol "3" when expecting one of the following:
begin function package pragma procedure subtype type use
<an identifier> <a double-quoted delimited-identifier> form
current cursor external language
  #9 (permalink)  
Antiguo 10/12/2007, 13:39
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Re: Duda Con Procedimiento

Hola,


Cita:
entonces el procedimiento que he creado no sirve para nada?
Eso lo debes decidir tu.


Cita:
ademas el ejemplo que has puesto me da lo siguiente con TOAD

PLS-00103: Encountered the symbol "3" when expecting one of the following:
begin function package pragma procedure subtype type use
<an identifier> <a double-quoted delimited-identifier> form
current cursor external language
Los numeros de linea que ves en el ejemplo que publique se deben a la herramienta de Oracle SQL*Plus, no son parte del codigo. Para el TOAD utiliza lo siguiente.

Código:
create or replace procedure p1
 as
begin
insert into mov_2
select
 id_movimientos_mes,
 fecha,
 cantidad,
 total,
 tipo_entrega,
 null,
 n_factura,
 orden_compra
from mov_1;
execute immediate 'truncate table mov_1';
delete from mov_1;
end;
Recuerda que debes elegir una de las dos opciones, el DELETE o TRUNCATE, no dejes las dos porque no tiene sentido.

Saludos
  #10 (permalink)  
Antiguo 10/12/2007, 14:15
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: Duda Con Procedimiento

Matanga, eres un Santo y te felicito por ello.

Un saludo
  #11 (permalink)  
Antiguo 10/12/2007, 16:45
Avatar de rmarinsd  
Fecha de Ingreso: septiembre-2007
Mensajes: 78
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Duda Con Procedimiento

Jajajajaja Matanga que paciencia teneis mas de uno ya lo hubiese ignorado, habil matanga ya te dio la respuesta y como consejo haz caso a lo que dijo lee los manuales.
  #12 (permalink)  
Antiguo 11/12/2007, 01:27
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: Duda Con Procedimiento

Por eso he dicho que es un Santo.

  #13 (permalink)  
Antiguo 11/12/2007, 14:27
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Re: Duda Con Procedimiento

habil, no se como quieres lograr un programa que gestione tales cosas si ni tansiquiera sabes como utilizar un insert....

ademas poniendote cabezudo en que es imposible sin utilizar un cursor....

entre para solucionarlo, pero veo que este santo varon te lo soluciono sobradamente.





Mejor Cerrar este hilo.
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #14 (permalink)  
Antiguo 11/12/2007, 15:45
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: Duda Con Procedimiento

Yo lo diria de una maneras mas fuerte , grosera y malsonante, pero por una vez me voy a a callar.
  #15 (permalink)  
Antiguo 12/12/2007, 11:40
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 16 años, 5 meses
Puntos: 3
Re: Duda Con Procedimiento

Bien hecho Matanga, se debe responder lo mas atento posible.

Sino de otra manera esto no seria un foro.

Sldo Atte, Mario.
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 13:12.