PDA

Ver la Versión Completa : Desde una SP crear tabla e insert


jars
30-07-2013, 21:43:09
Hola amigos.
Me encuentro con el siguiente problema.
A partir de una tabla, debo crear ntablas segun los distintos valores de un campo.
Mi problema es que desde la SP invoco a otra SP que crea la tabla y luego intenta hace un insert pero falla.
Lo que noto es que desde el IBexpert ejecuto la SP pero las tablas no se crean hasta que no le doy con el boton del commit.
Hay alguna forma de crear una tabla e inmediatamente poder hacer un insert, desde la misma SP?
Gracias

Casimiro Notevi
30-07-2013, 22:48:39
¿Qué base de datos?, ¿qué es lo que te falla?, ¿qué estás haciendo (código)?, ¿qué quieres hacer exactamente?, ¿por qué quieres crear tablas desde un SP?... ... ...

jars
30-07-2013, 22:55:33
La bbdd es Firebird 2.5
El problema es que no me permite crear una tabla e inmediatamente despues insertarle registros.


CREATE OR ALTER PROCEDURE TV_SP_SPLIT_TABLE (
atable varchar(25),
afield varchar(25))
returns (
rc varchar(1000))
as
declare variable new_tbl varchar(25);
declare variable read_fld varchar(25);
declare variable script1 varchar(1000);
declare variable script2 varchar(1000);
declare variable lexists integer;
begin
script1 = 'SELECT DISTINCT ' || :afield || ' FROM ' || :atable || ' ORDER BY 1';

/* recorre cada uno de los agentes */
for execute statement :script1 into :read_fld do
begin
-- existe la tabla?
new_tbl = :atable || '_' || :read_fld;
execute procedure tv_sp_exists_table(:new_tbl) returning_values :lexists;

if (:lexists > 0) then
begin
execute statement 'DELETE FROM ' || :new_tbl;
end else
begin
execute procedure tv_sp_create_dial_table_from(:atable, :new_tbl, :read_fld, :read_fld);
end

script2 = 'INSERT INTO ' || :new_tbl || ' SELECT * FROM ' || :atable ||
' WHERE ' || :afield || ' = ' || :read_fld;
execute statement :script2;
end

-- Todo OK
rc = 1;

-- Hubo un error
when any do
begin
rc = -1;
end
end

Casimiro Notevi
31-07-2013, 09:01:36
¿Y las tablas sí las crea?, ¿hasta dónde funciona?, ¿algún mensaje de error?