[firebase-br] Procedure Firebird Compila e não Executa
Tony
tony em tonysoftwares.com.br
Seg Jan 15 14:42:55 -03 2018
Pessoal,
A seguinte Procedure DDL Firebird compila mas não executa. Trata ela de
criação automática de campo nas Tabelas de um BD ou apenas numa Tabela
informada.
Alguém ajuda?
create or alter procedure Z_DDL_INSFIELDTABLE (
I_TABELA varchar(20),
I_FIELD varchar(20),
I_DOM varchar(20),
I_DEFAULT varchar(20),
I_NOTNULL char(1))
as
declare variable VSQL varchar(32765);
declare variable VDTYPE smallint;
begin
/* Qual o tipo do DOMINIO?
WHEN 261 THEN 'BLOB' ; WHEN 14 THEN 'CHAR' ; WHEN 40 THEN 'CSTRING'
WHEN 11 THEN 'D_FLOAT' ; WHEN 27 THEN 'DOUBLE' ; WHEN 10 THEN 'FLOAT'
WHEN 16 THEN 'INT64' ; WHEN 8 THEN 'INTEGER' ; WHEN 9 THEN 'QUAD'
WHEN 7 THEN 'SMALLINT' ; WHEN 12 THEN 'DATE' ; WHEN 13 THEN 'TIME'
WHEN 35 THEN 'TIMESTAMP' ; WHEN 37 THEN 'VARCHAR'
*/
SELECT DISTINCT RDB$FIELDS.RDB$FIELD_TYPE
FROM RDB$FIELDS
INNER JOIN RDB$RELATION_FIELDS
ON (RDB$RELATION_FIELDS.RDB$FIELD_SOURCE =
RDB$FIELDS.RDB$FIELD_NAME)
WHERE RDB$FIELDS.RDB$SYSTEM_FLAG <> 1 and RDB$FIELDS.RDB$FIELD_NAME=:I_
DOM
INTO :vDTYPE;
/*ALTER TABLE SETOR
ADD CHEFE_ID dom_i_integer DEFAULT 0 NOT NULL ; */
/* Setença DDL conforme Tipo do Domínio e NULL not */
vSQL = 'ALTER TABLE ' || :I_TABELA || ' ADD ' || :I_FIELD || :I_DOM;
/* TABELA INDIVIDUAL OU TODAS TABELAS */
if (:I_TABELA <> '' ) then begin
/* HÁ VALOR PADRÃO ? */
if (:I_DEFAULT <> '') then begin
if (:vDTYPE = 14 or :vDTYPE = 37) /* Char, Varchar */ then
vSQL = vSQL || ' DEFAULT ' ||''||:I_DEFAULT||''; else
vSQL = vSQL || ' DEFAULT ' || :I_DEFAULT ; /* pressuponto
Integer !!! TESTAR OUTROS DEPOIS */
end
/* NULL ou NOT NULL */
if (:I_NOTNULL='S') then vSQL = vSQL || ' NOT NULL ' ;
EXECUTE STATEMENT vSQL; /* Executa a Setença */
end else begin
/* LOOPING de todas as Tabelas */
FOR Select rdb$Relation_Name
From rdb$relations
Where (rdb$system_flag <> 1 or Rdb$System_Flag is null) and
Rdb$View_BLR is null
Order by rdb$relation_name
INTO :I_TABELA do
EXECUTE STATEMENT vSQL;
end
end
Mais detalhes sobre a lista de discussão lista