SET SQL DIALECT 3;
SET NAMES ISO8859_1;
SET TERM ^ ;
CREATE PROCEDURE SP_LIMPAR_TABELAS
AS
BEGIN
EXIT;
END^
SET TERM ; ^
SET TERM ^ ;
ALTER PROCEDURE SP_LIMPAR_TABELAS
AS
DECLARE VARIABLE NOME_OBJETO VARCHAR(80);
DECLARE VARIABLE VSQL VARCHAR(256);
begin
FOR
SELECT DISTINCT t.RDB$RELATION_NAME TABELA
FROM RDB$USER_PRIVILEGES t
WHERE t.RDB$RELATION_NAME NOT LIKE ‘RDB$%’ AND
t.RDB$OBJECT_TYPE=0
ORDER BY 1
INTO :nome_objeto
DO
BEGIN
VSQL = ‘DELETE FROM ‘ :nome_objeto;
EXECUTE STATEMENT VSQL;
END
FOR SELECT g.RDB$GENERATOR_NAME
FROM RDB$GENERATORS g
WHERE (g.RDB$GENERATOR_NAME NOT LIKE ‘RDB$%’) AND
(g.RDB$GENERATOR_NAME NOT LIKE ‘SQL$%’)
INTO :nome_objeto
DO
BEGIN
VSQL = ‘SET GENERATOR ‘ :nome_objeto ‘ TO 0’;
EXECUTE STATEMENT VSQL;
END
end
ai blz, estou com um erro muito estranho, tenho uma atualizador, que possui a base de dados contendo as atualizações, nele tenho algumas alterações de procedures, campos,tabelas, que irão atualizar o banco de dados do cliente.
Quando executo o atualizador ele percorre a base de atualizações, e executa os scripts na base de dados do cliente, este problema só está ocorrendo quando crio ou atualizo uma procedure.
Quando executo a alteração de procedure uma exceção é lançada, na exceção eu pego o comando SQL e insiro no ibexpert e ele passa sem problemas.
Abaixo em negrito segue a exceção, claro que eu retiro os caracteres que fazem parte da exceção e executo apenas o SQL, fazendo isso no ibexpert funciona, já no atualizador não. Repetindo que somente ocorre isso na atualização das stored procedures, as outras atualizações correm normalmente.
A exceção ocorre no primeiro select, “CAUSA : Token unknown – line 40, column 8
?”, mas colocando no ibexpert, nenhum erro aparece.
Alguém possui alguma explicação plausível para isso????
—————————
Warning
—————————
Não foi possível a inclusão/alteração do comando:
1019:ALTER PROCEDURE COTFICHA_FORNECEDOR (
IN_COTACAO CHAR(10),
IN_COD_EMPRESA CHAR(6))
AS
declare variable var_contafichaserv smallint;
declare variable var_codfornecedor char(5);
declare variable var_contafichaprod smallint;
declare variable var_coditem varchar(20);
declare variable var_sequencia smallint;
declare variable var_quantidade double precision;
declare variable var_servico varchar(40);
declare variable var_total smallint;
declare variable var_contap smallint;
declare variable var_contas smallint;
declare variable var_seqfornecedor smallint;
declare variable var_contador integer;
declare variable var_numfornecedor smallint;
declare variable var_nfichaspreenchidas smallint;
declare variable var_achoufichaforn smallint;
begin
/*—————————————————————————-
– Essa SP verifica se o fornecedor já tem a respectiva ficha de Cotação –
– gerada. Se ainda não existir, o sistema preenche automaticamente –
Versão: 1.0.3
—————————————————————————-*/
var_contafichaprod = 0;
var_contafichaserv = 0;
var_contap = 0;
var_contas = 0;
var_contador = 0;
var_numfornecedor = 0;
/* Verifica o número de fornecedores e registra as fichas de cabeçalho */
select count(z.cd_empresa)
from cotacao_fornece z
where (z.codigo = :in_cotacao) and (z.cd_empresa = :in_cod_empresa)
into :var_numfornecedor;
select count(x.cd_empresa)
from cotacao_fornecedor_header x
where (x.codigo = :in_cotacao) and (x.cd_empresa = :in_cod_empresa)
into :var_nfichaspreenchidas;
if (var_numfornecedor > var_nfichaspreenchidas) then
begin
for select m.cd_fornece, m.seq_fornece
from cotacao_fornece m
where (m.codigo = :in_cotacao) and (m.cd_empresa = :in_cod_empresa)
into :var_codfornecedor, :var_seqfornecedor
do begin
select count(n.codigo)
from cotacao_fornecedor_header n
where (n.cd_fornece = :var_codfornecedor) and
(n.seq_fornece = :var_seqfornecedor) and
(n.cd_empresa = :in_cod_empresa) and (n.codigo = :in_cotacao)
into :var_achoufichaforn;
if (var_achoufichaforn = 0) then
begin
insert into cotacao_fornecedor_header (codigo, cd_empresa, cd_fornece,
seq_fornece, valortotal, vlrredespacho, valoreajuste, valordesconto)
values
(:in_cotacao, :in_cod_empresa, :var_codfornecedor,
:var_seqfornecedor, 0, 0, 0, 0);
end
end
end
— Conta o número de produtos
select count(a.codigo)
from cotacao_itens a
where (a.codigo = :in_cotacao) and (a.cd_empresa = :in_cod_empresa)
into :var_contap;
— Conta o número de Serviços
select count(b.codigo)
from cotacao_servicos b
where (b.codigo = :in_cotacao) and (b.cd_empresa = :in_cod_empresa)
into :var_contas;
— Corrigido em 14-12-07 – Deixa-se de contar os itens dos fornecedores
— e passa a contar os itens gerais em servicos e produtos
–var_total = var_contafichaprod + var_contafichaserv;
var_total = var_contap + var_contas;
–Verifica se foram inseridos itens na cotação
if (var_total > 0) then
begin
— Procura todos os fornecedores listados na cotação
for select cf.cd_fornece, cf.seq_fornece
from cotacao_fornece cf
where (cf.codigo = :in_cotacao) and (cf.cd_empresa = :in_cod_empresa)
into :var_codfornecedor, :var_seqfornecedor
do
begin
–Conta o número de itens registrados para o forncedor
select count(cfi.codigo)
from cotacao_fornece_itens cfi
where (cfi.codigo = :in_cotacao) and
(cfi.cd_empresa = :in_cod_empresa) and
(cfi.cd_fornece = :var_codfornecedor) and
(cfi.seq_fornece = :var_seqfornecedor)
into :var_contafichaprod;
— se a quantidade de itens for menor, ele irá inserir os itens faltantes
— para aquele fornecedore
if (var_contafichaprod < var_contap) then
begin
— localiza todos os itens da cotação e insere todos os faltantes
for select a.cd_item, a.seq_item, a.quantidade
from cotacao_itens a
where (a.codigo = :in_cotacao) and (a.cd_empresa = :in_cod_empresa)
into :var_coditem, :var_sequencia, :var_quantidade
do
begin
select count(b.cd_item)
from cotacao_fornece_itens b
where (b.codigo = :in_cotacao) and
(b.cd_empresa = :in_cod_empresa) and
(b.cd_fornece = :var_codfornecedor) and
(b.seq_fornece = :var_seqfornecedor) and
(b.cd_item = :var_coditem) and
(b.seq_item = :var_sequencia)
into :var_contador;
if (var_contador = 0) then
begin
insert into cotacao_fornece_itens (cd_empresa, codigo, cd_fornece,
seq_fornece, cd_item, valor_unit, ipi, valor_ipi, valor_total,
seq_item, quantidade, valorfinal, valor_kgm)
Values
(:in_cod_empresa, :in_cotacao, :var_codfornecedor,
:var_seqfornecedor, :var_coditem, 0, 0, 0, 0,
:var_sequencia, :var_quantidade, 0, 0);
end
end
end
— Fim do processo de inserção de itens/materiais————————-
— Verifica o número de servicos na cotação——————————-
select count(cfs.codigo)
from cotacao_fornece_serv cfs
where (cfs.codigo = :in_cotacao) and
(cfs.cd_empresa = :in_cod_empresa) and
(cfs.cd_fornece = :var_codfornecedor) and
(cfs.seq_fornece = :var_seqfornecedor)
into :var_contafichaserv;
if (var_contafichaserv < var_contas) then
begin
for select cs.seq_item, cs.servico, cs.quantidade
from cotacao_servicos cs
where (cs.codigo = :in_cotacao) and (cs.cd_empresa = :in_cod_empresa)
into :var_sequencia, :var_servico, :var_quantidade
do
begin
select count(k.codigo)
from cotacao_fornece_serv k
where (k.codigo = :in_cotacao) and
(k.cd_empresa = :in_cod_empresa) and
(k.cd_fornece = :var_codfornecedor) and
(k.seq_fornece = :var_seqfornecedor) and
(k.descricao = :var_servico) and
(k.seq_item = :var_sequencia)
into :var_contador;
if (var_contador = 0) then
begin
insert into cotacao_fornece_serv (cd_empresa, codigo, cd_fornece,
seq_fornece, valor, seq_item, descricao, quantidade)
Values
(:in_cod_empresa, :in_cotacao, :var_codfornecedor,
:var_seqfornecedor, 0, :var_sequencia, :var_servico,
:var_quantidade);
end
end
end
— ———————————————————————–
end
end
end
CAUSA : Token unknown – line 40, column 8
?
Confirmar a Atualização do Parâmetro?
—————————
Yes No
—————————