Create view DENTRO de una funcion
Publicado por Juannm (1 intervención) el 10/12/2006 13:46:35
Hola! A ver si me podeis ayudar con este problema...
Lo que necesito es: escribir una funcion que haga inserciones de entradas de cine. Para ello he pensado en escribir "algo" que contenga de donde sacar los datos para la insercion, y despues el INSERT propiamente dicho.
Lo que he escrito es: una funcion que haga inserciones, y para simplificar el codigo de la sentencia INSERT, primero creo una vista. ¡El problema es que no se crea bien!
Una version reducida es:
create function inserta_entrada(nombre_cine int, numero_sala int, numero_butaca int) returns void as $$
create view mi_compra as
select id_cine from cines where nombre=$1 and sala=$2 and butaca=3;
insert into entradas values (precio, idcine, idcliente)
select 6.00, id_cine, id_cliente from mi_compra, clientes where clientes.nombre='Luis';
$$ language SQL;
Como veis, primero creo una vista con el id_cine correspondiente a la compra de la entrada. Luego hago el insert con dicho id_cine y el nombre del cliente.
El problema es que en el insert, psql me da un error diciendo que "la relacion mi_compra no existe" :(
Por un lado: ¿esta es la mejor manera de hacer lo que quiero? y por otro: ¿como puedo hacer que la vista "mi_compra" exista para el insert?
De momento lo que he hecho es NO usar la vista, y poner su codigo directamente en el campo from del insert, pero ahi stoy perdiendo legibilidad porque el codigo de la vista es bastante mas largo.
A ver si me podeis dar una pista.
Saludos!
Lo que necesito es: escribir una funcion que haga inserciones de entradas de cine. Para ello he pensado en escribir "algo" que contenga de donde sacar los datos para la insercion, y despues el INSERT propiamente dicho.
Lo que he escrito es: una funcion que haga inserciones, y para simplificar el codigo de la sentencia INSERT, primero creo una vista. ¡El problema es que no se crea bien!
Una version reducida es:
create function inserta_entrada(nombre_cine int, numero_sala int, numero_butaca int) returns void as $$
create view mi_compra as
select id_cine from cines where nombre=$1 and sala=$2 and butaca=3;
insert into entradas values (precio, idcine, idcliente)
select 6.00, id_cine, id_cliente from mi_compra, clientes where clientes.nombre='Luis';
$$ language SQL;
Como veis, primero creo una vista con el id_cine correspondiente a la compra de la entrada. Luego hago el insert con dicho id_cine y el nombre del cliente.
El problema es que en el insert, psql me da un error diciendo que "la relacion mi_compra no existe" :(
Por un lado: ¿esta es la mejor manera de hacer lo que quiero? y por otro: ¿como puedo hacer que la vista "mi_compra" exista para el insert?
De momento lo que he hecho es NO usar la vista, y poner su codigo directamente en el campo from del insert, pero ahi stoy perdiendo legibilidad porque el codigo de la vista es bastante mas largo.
A ver si me podeis dar una pista.
Saludos!
Valora esta pregunta


0