Oracle - Insertar datos dentro de tablas creadas pro un procedure

   
Vista:

Insertar datos dentro de tablas creadas pro un procedure

Publicado por paolo (2 intervenciones) el 21/06/2014 19:14:25
Hola, estoy buscando ayuda para un trabajo de BD para mi universidad y me gustaría saber como podria insertar datos de los clientes en unas tablas de comunas que cree a través de un procedure llamado CREARTABLASCOMUNAS(que crea las tablas de todas las comunas de santiago por separado), les dejo mi trabajo adjunto para que lo vean. Ojala puedan ayudarme, muchas gracias por su tiempo de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Insertar datos dentro de tablas creadas pro un procedure

Publicado por ramironikolas (35 intervenciones) el 23/06/2014 15:44:15
Disculpa maquina, pero no puedo bajar el archivo, podrías especificar un poco más el problema?
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar datos dentro de tablas creadas pro un procedure

Publicado por paolo (2 intervenciones) el 23/06/2014 17:30:42
mi problema es que hice un procedure donde creo unas tablas q es el sig

create or replace procedure CREARTABLASCOMUNAS as
a_comuna Comuna.nombre%TYPE;
a_Ncomuna VARCHAR2(300);
cursor c_indice is select nombre
from Comuna;
begin
open c_indice;
loop
fetch c_indice into a_comuna;
exit when c_indice%NOTFOUND;
a_Ncomuna := 'create table ' || replace(a_comuna,' ','_') || '(nombre VARCHAR2(20))';
EXECUTE IMMEDIATE a_Ncomuna;
end loop;
close c_indice;
end CREARTABLASCOMUNAS;

y ahora quiero ingresar en dichas tablas a los clientes que son de dichas comunas ( las comunas estan previamente ingresadas en una tabla de comunas) asi como el cliente Pepito Araya, direccion: xxxx, telefono:xxxxxxxx, comuna: Lo Barnechea, etc (estan ingresados en una tabla de clientes) , este tambien ingresado en la tabla de lo barnechea q fue creada por el procedure de arriba.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar datos dentro de tablas creadas pro un procedure

Publicado por ramironikolas (35 intervenciones) el 25/06/2014 01:12:39
Lo siguiente podes hacer al momento de crear cada tabla de comuna.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create or replace procedure CREARTABLASCOMUNAS as
 
	a_comuna Comuna.nombre%TYPE;
	a_Ncomuna VARCHAR2(300);
	cursor c_indice is select nombre from Comuna;
 
begin
	open c_indice;
 
	loop
		fetch c_indice into a_comuna;
		exit when c_indice%NOTFOUND;
		a_Ncomuna := 'create table ' || replace(a_comuna,' ','_') || '(nombre VARCHAR2(20)) AS SELECT CLINOM FROM CLIENTES WHERE COMUNA = ' ||  a_comuna;
		EXECUTE IMMEDIATE a_Ncomuna;
	end loop;
 
	close c_indice;
 
end CREARTABLASCOMUNAS;

Despues hay algo que no entiendo, por ejemplo el hecho de que la tabla de cada comuna tenga una sola columna "nombre" donde supongo pretendes meter los datos de cada cliente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar datos dentro de tablas creadas pro un procedure

Publicado por Row123 (3 intervenciones) el 25/06/2014 04:58:11
si, si me di cuenta de ese pequeño percance y lo arregle poniendo los datos de el cliente
Y no no me funciono, igual gracias por responder y intentar ayudarme, el trabajo ya lo envie, ahora solo falta esperar la nota. muchas gracias denuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar datos dentro de tablas creadas pro un procedure

Publicado por ramironikolas (35 intervenciones) el 25/06/2014 23:32:59
Loco disculpa la demora y el error, pasa que había escrito la consulta sin probarla.

Aca la corregí y ahora si la probé, aunque sea tarde espero que te sirva para la proxima

CREATE OR REPLACE PROCEDURE CREARTABLASCOMUNAS AUTHID CURRENT_USER AS
A_COMUNA COMUNA.NOMBRE%TYPE;
A_NCOMUNA VARCHAR2(300);
CURSOR C_INDICE IS SELECT NOMBRE FROM COMUNA;

BEGIN
OPEN C_INDICE;
LOOP FETCH C_INDICE
INTO A_COMUNA;
EXIT WHEN C_INDICE%NOTFOUND;
A_NCOMUNA := 'CREATE TABLE ' || REPLACE(A_COMUNA,' ','_') || ' AS SELECT NOMBRE, TELEFONO, DIRECCION FROM CLIENTES WHERE COMUNA = ''' || A_COMUNA || '''' ;
EXECUTE IMMEDIATE A_NCOMUNA;
END LOOP; CLOSE C_INDICE;
END CREARTABLASCOMUNAS;

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar datos dentro de tablas creadas pro un procedure

Publicado por Row123 (3 intervenciones) el 26/06/2014 01:18:44
en teoria corre pero ahora no crea las tablas como antes, ademas lo que necesito es ingresar a las personas hacer un insert a las tablas creadas ese procedimiento lo que hace es crear 34 tablas(por ej la de lo_barnechea). Dentro de la tabla clientes inserte a dos personas que tienen el atributo de comunas= lo_barnechea y me falta q a esas tablas cuando las llame para ver lo q tienen con select * from lo_barnechea; me aparezcan esas dos personas. El procedure ya me crea las tablas y ya cambie los atrivutos de las nuevas tablas a las del cliente y si funciona solo me falta insertar las personas en esas tablas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar datos dentro de tablas creadas pro un procedure

Publicado por ramironikolas (35 intervenciones) el 26/06/2014 04:05:39
Probá borrar todas las tablas creadas, y ejecutar el procedure de nuevo. Tambien recordá que el select que esta remarcado en negrita lo tenes que adaptar a tu modelo de datos.
Además cuanto te de error tratá de postearlo para saber donde y porque está fallando.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar datos dentro de tablas creadas pro un procedure

Publicado por Row123 (3 intervenciones) el 26/06/2014 05:02:44
si si lo adapte y ya las habia borrado,la cosa es que no manda error se ejecuta pero no cumple el proceso de crear las tablasobviamente poniendo BEGIN CREARTABLASCOMUNAS; END;.
mira asi esta adaptado :

create or replace procedure CREARTABLASCOMUNAS as
a_comuna Comuna.nombre%TYPE;
a_Ncomuna VARCHAR2(300);

cursor c_comuna is select nombre
from Comuna;
begin
open c_comuna;
loop
fetch c_comuna into a_comuna;
exit when c_comuna%NOTFOUND;
a_Ncomuna := 'create table ' || replace(a_comuna,' ','_') || ' AS SELECT *
FROM direccion,cliente
WHERE (comuna = ''' || a_comuna || ''') and
(codigo_direccion = direccion.codigo)';
EXECUTE IMMEDIATE a_Ncomuna;
end loop;
close c_comuna;
end;
Las comunas estan en la tabla direccion que esta unida con clientes por una llave foranea.
cuando lo creo sale q fue creado(Procedure created.)
y cuando le ejecuto sale Statement processed.
y cuando reviso el object browser no estan las tablas respectivas de las comunas y con lo q tenia antes q es lo sig si se crean

create or replace procedure CREARTABLASCOMUNAS as
a_comuna Comuna.nombre%TYPE;
a_Ncomuna VARCHAR2(300);
cursor c_comuna is select nombre
from Comuna;
begin
open c_comuna;
loop
fetch c_comuna into a_comuna;
exit when c_comuna%NOTFOUND;
a_Ncomuna := 'create table ' || replace(a_comuna,' ','_') || '(numero NUMBER(6),nombre VARCHAR2(20),apellido VARCHAR2(40),codigo_direccion NUMBER(8),rut CHAR(10),telefono NUMBER(10),fecha_ultima_compra DATE)';
EXECUTE IMMEDIATE a_Ncomuna;
end loop;
close c_comuna;
end;

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar datos dentro de tablas creadas pro un procedure

Publicado por ramironikolas (35 intervenciones) el 26/06/2014 14:52:51
La verdad que sin conocer tu modelo de datos se hace dificil ayudar.
El procedimiento se debe ejecutar con EXECUTE CREARTABLASCOMUNAS y por otro lado deberías probar que SELECT *
FROM direccion,cliente
WHERE (comuna = ''' || a_comuna || ''') and
(codigo_direccion = direccion.codigo)';
funcione por separado, para ver si trae datos.
A ciegas otra cosa no se me ocurre.
PD: además fijate la cabecera del procedure que te pase "CREATE OR REPLACE PROCEDURE CREARTABLASCOMUNAS AUTHID CURRENT_USER AS "
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar