Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Desde una SP crear tabla e insert (https://www.clubdelphi.com/foros/showthread.php?t=83794)

jars 30-07-2013 21:43:09

Desde una SP crear tabla e insert
 
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.

Código SQL [-]
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?


La franja horaria es GMT +2. Ahora son las 23:33:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi