Ver Mensaje Individual
  #3  
Antiguo 30-07-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 283
Reputación: 23
jars Va por buen camino
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
Responder Con Cita