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

Cómo crear una tabla en un sp?

Estas en el tema de Cómo crear una tabla en un sp? en el foro de Oracle en Foros del Web. Estimados(as) todos(as): Alguien me podría dar su apoyo indicándome cómo puedo borrar y crear una tabla en un sp de oracle? He intentado directamente pero ...
  #1 (permalink)  
Antiguo 02/07/2008, 14:09
 
Fecha de Ingreso: junio-2008
Mensajes: 14
Antigüedad: 15 años, 10 meses
Puntos: 0
Pregunta Cómo crear una tabla en un sp?

Estimados(as) todos(as):
Alguien me podría dar su apoyo indicándome cómo puedo borrar y crear una tabla en un sp de oracle?
He intentado directamente pero no complica el sp. También probé con el "Execute inmediate..." y nada tampoco.

De antemano les agradezco nuevamente su tiempo.

John
  #2 (permalink)  
Antiguo 02/07/2008, 14:47
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Cómo crear una tabla en un sp?

Que Tal ,


No se exactamente cual se la necesidad de crear una tabla dentro de un Store Procedure. De Hecho no es muy recomendable hacerlo. Pero si es eso lo que en reaildad necesitas puedes hacerlo de la siguiente manera.


BEGIN

EXECUTE IMMEDIATE 'CREATE TABLE DINAMICA (ID NUMBER(10), DES VARCHAR2(50))';

--EXECUTE IMMEDIATE 'DROP TABLE DINAMICA';

END;

Espero te sea de Utilidad.
  #3 (permalink)  
Antiguo 02/07/2008, 18:02
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: Cómo crear una tabla en un sp?

antes se creaban/borraban tablas "temporales" dentro de un procedure para procesar mucha informacion, pero era una mala costumbre, igual las "global temporary tables" resuelven tu problema, checate la documentacion sobre ellas
__________________
Blogzote.com :-) Mi blog
  #4 (permalink)  
Antiguo 03/07/2008, 07:02
 
Fecha de Ingreso: junio-2008
Mensajes: 14
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Cómo crear una tabla en un sp?

La necesito crear a través de un select, osea "Create table t as Select ...."
Luego, a partir de los datos de esa tabla, actualizar otra más.

Voy a buscar lo de las temporary tables.

Si alguien tiene algún otro antecedente, lo agradezco también.

John
  #5 (permalink)  
Antiguo 03/07/2008, 08:36
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Cómo crear una tabla en un sp?

Que Tal JohnwF,

Si quieres desribeme un poco más detallado tu problema, y con gusto te puedo dar mi punto de vista sobre la mejor manera de resolverlo en cuanto a Performance.

Saludos.
  #6 (permalink)  
Antiguo 03/07/2008, 21:38
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: Cómo crear una tabla en un sp?

Cita:
Iniciado por JohnwF Ver Mensaje
La necesito crear a través de un select, osea "Create table t as Select ...."
Luego, a partir de los datos de esa tabla, actualizar otra más.

Voy a buscar lo de las temporary tables.

Si alguien tiene algún otro antecedente, lo agradezco también.

John
entonces tengo razon, una mala costumbre es procesar mucha informacion generando una tabla "temporal" con un create as select, pero siempre te topas con los mismos problemas:

concurrencia, ¿que pasa si llega otro usuario y ejecuta el mismo proceso? podria ser que truene al querer crear la misma tabla,

integridad, pudiera ser que al ejecutar otra vez el proceso, el primer proceso no genere toda la informacion al haberla "pisado" el segundo proceso

y varios mas

con una temporary no cambia mucho la cosa pero te olvidas de esos problemas al mantener la informacion en esa tabla independiente entre sessiones y solo existe esa informacion mientras dura la session (dependiendo de la opcion al crearla "on commit preserve/delete rows) checate la documentacion al respecto
__________________
Blogzote.com :-) Mi blog
  #7 (permalink)  
Antiguo 10/10/2008, 12:55
 
Fecha de Ingreso: abril-2008
Mensajes: 1
Antigüedad: 16 años
Puntos: 0
Respuesta: Cómo crear una tabla en un sp?

Que tal buenas tardes mi comentario es porque necesito crear una tabla temporal en un sp, el asunto es que quiero realizar varias inserciones, pero necesito almacenar los registros que no se logren insertar por algun motivo (que valido), por lo cual pienso en generar una tabla temporal de los registros errones para despues crear un cursor de esa tabla y regresarme esos datos a mi aplicacion.

He probado algo asi

DINAMIC_SQL := 'CREATE GLOBAL TEMPORARY TABLE '|| ErrP_SUBE_MOTOS_PLANTA( '||
'ERROR INTEGER, ' ||
'MOT_NUMEROSERIE VARCHAR(15), '||
'FKEDO_CLAVE VARCHAR(2), '||
'FKAGE_CLAVE VARCHAR(2), '||
'FKMOD_ANIO DATE, '||
'FKMOD_CLAVE VARCHAR(10), '||
'MOT_NUMEROCHASIS VARCHAR(20), '||
'MOT_NUMEROMOTOR VARCHAR(20), '||
'MOT_FACTURAPEREDO VARCHAR(15) '||
') ON COMMIT DELETE ROWS';

EXECUTE IMMEDIATE V_DINAMIC_SQL;

Pero no funciona, si alguien pudiera darme una idea de como poder regresar un corsor pero que no sea generado de una cunsulta.

He intentado crear una tabla pero al momento de hacer la asignacion de la tabla a la variable de salida de tipo T_CURSOR me dice que no se puede hacer esa asignacion.
  #8 (permalink)  
Antiguo 10/10/2008, 13:14
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: Cómo crear una tabla en un sp?

lo mejor seria que crearas un nuevo tema pero bueno

viendo lo que planteas creo que deberias leer de nuevo la documentacion sobre

GLOBAL TEMPORARY TABLES

no tiene ningun caso el crear (y supongo que al ultimo borrar) una global temporary table en un SP a la vieja usansa, una de las ventajas precisamente de un global temporary es que los datos se mantienen solo para la session actual y puedes realizar inserts, select, delete, update sobre ella y solo vera esos cambios la session actual
__________________
Blogzote.com :-) Mi blog
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 15:53.