[firebase-br] Procedure
Gladiston Santana
gladiston em vidy.com.br
Qui Set 12 11:51:16 -03 2013
Uma procedure só para um insert é um pouco de disperdicio, não?
Tente dar uma encorpada nela, juntando mais operações, ex:
create or alter procedure SP_CLIENTES (
P_ACAO D_CODIGO30,
P_ID_CLIENTE D_ROWID,
P_RAZAO_SOCIAL D_NOMECOMPLETO = '',
P_NOME_ALTERNATIVO D_NOMECOMPLETO = '',
P_CNPJ D_CNPJ = '',
P_RG D_RG = '',
P_CPF D_CPF = '',
P_ENDERECO D_ENDERECO = '',
P_END_NUMERO D_END_NUMERO = '',
P_END_COMPLEMENTO D_END_COMPLEMENTO = '',
P_END_BAIRRO D_END_BAIRRO = '',
P_END_CIDADE D_END_CIDADE = '',
P_END_CEP D_END_CEP = '',
P_END_ESTADO D_END_ESTADO = 'SP',
P_END_PAIS D_END_PAIS = 'BRA',
P_SUFRAMA D_SUFRAMA = '',
P_OBSERVACAO D_MEMO = '',
P_ATIVIDADE_PRINCIPAL D_CODIGO30 = '',
P_ATIVIDADE_PRINCIPAL_DESC D_DESCRICAO = '',
P_ATIVIDADE_SECUNDARIA D_CODIGO30 = '',
P_ATIVIDADE_SECUNDARIA_DESC D_DESCRICAO = '',
P_RESTRICAO_FINANCEIRA D_RESPOSTA = 'N',
P_SE_CLIENTE D_RESPOSTA = 'N',
P_END_ESTRANGEIRO1 D_ENDERECO = '',
P_END_ESTRANGEIRO2 D_ENDERECO = '',
P_END_ESTRANGEIRO3 D_ENDERECO = '',
P_STATUS D_STATUS = 'A')
returns (
RESULT_VALUE D_ROWID)
as
declare variable NEXT_ID integer = 0;
declare variable RESULT_ESTATISTICA integer = 0;
declare variable P_SE_ESTRANGEIRO D_RESPOSTA = 'N';
declare variable LRAZAO_SOCIAL D_NOMECOMPLETO = '';
declare variable LSOMA_RECEBIDO D_VALOR2 = 0;
begin
result_value=0;
next_id=0;
if (:p_acao not in ('INCLUIR','ALTERAR','EXCLUIR',
'PARALIZAR','CANCELAR','ATIVAR','RANKING')) then
begin
exception ERR 'Ação solicitada ('||:p_acao||') fora dos parametros
permitidos !';
suspend;
exit;
end
/* Quando o CNPJ e INSC.Estadual estiver preenchido, entao o RG e CPF
devem estar brancos */
if (:p_cnpj<>'') then
begin
p_rg='';
p_cpf='';
end
/* Quando o RG e CPF estiver preenchido, entao o CNPJ e INSC.Estadual
devem estar brancos */
if ((:p_rg<>'') and (:p_cpf<>'')) then
begin
p_cnpj='';
end
/* verifica se é estrangeiro ou nao, caso seja alguns campos devem ser
limpos e vice-versa */
if (:p_end_pais<>'BRA') then
begin
p_se_estrangeiro ='S';
p_cnpj='';
p_cpf='';
p_rg='';
p_endereco='';
p_end_numero='';
p_end_complemento='';
p_end_bairro='';
p_end_cidade='';
p_end_cep='';
p_end_estado='**';
p_atividade_principal='';
p_atividade_principal_desc='';
p_atividade_secundaria='';
p_atividade_secundaria_desc='';
p_suframa='';
end
else
begin
p_end_estrangeiro1='';
p_end_estrangeiro2='';
p_end_estrangeiro3='';
end
if (:p_acao='INCLUIR') then
begin
next_id=0;
/* Buscando o no. do id */
select coalesce(max(id_cliente),0) from clientes
into :next_id;
next_id=:next_id+1;
insert into clientes(
id_cliente,
razao_social,
nome_alternativo,
ranking,
cnpj,
cpf,
rg,
endereco,
end_numero,
end_complemento,
end_bairro,
end_cidade,
end_cep,
end_estado,
end_pais,
end_estrangeiro1,
end_estrangeiro2,
end_estrangeiro3,
atividade_principal,
atividade_principal_desc,
atividade_secundaria,
atividade_secundaria_desc,
suframa,
observacao,
restricao_financeira,
se_cliente,
se_estrangeiro,
excluir_codigo,
last_update,
last_owner,
status)
values(
:next_id,
:p_razao_social,
:p_nome_alternativo,
0,
:p_cnpj,
:p_cpf,
:p_rg,
:p_endereco,
:p_end_numero,
:p_end_complemento,
:p_end_bairro,
:p_end_cidade,
:p_end_cep,
:p_end_estado,
:p_end_pais,
:p_end_estrangeiro1,
:p_end_estrangeiro2,
:p_end_estrangeiro3,
:p_atividade_principal,
:p_atividade_principal_desc,
:p_atividade_secundaria,
:p_atividade_secundaria_desc,
:p_suframa,
:p_observacao,
:p_restricao_financeira,
:p_se_cliente,
:p_se_estrangeiro,
'',
current_time,
current_user,
'A');
-- atualiza estatistica de uso desse cliente
execute procedure SP_ESTATISTICAS 'CLIENTES',:next_id
returning_values :result_estatistica;
result_value=:next_id;
end
if (:p_acao='ALTERAR') then
begin
update clientes
set razao_social=:p_razao_social,
nome_alternativo=:p_nome_alternativo,
cnpj=:p_cnpj,
cpf=:p_cpf,
rg=:p_rg,
endereco=:p_endereco,
end_numero=:p_end_numero,
end_complemento=:p_end_complemento,
end_bairro=:p_end_bairro,
end_cidade=:p_end_cidade,
end_cep=:p_end_cep,
end_estado=:p_end_estado,
end_pais=:p_end_pais,
end_estrangeiro1=:p_end_estrangeiro1,
end_estrangeiro2=:p_end_estrangeiro2,
end_estrangeiro3=:p_end_estrangeiro3,
atividade_principal=:p_atividade_principal,
atividade_principal_desc=:p_atividade_principal_desc,
atividade_secundaria=:p_atividade_secundaria,
atividade_secundaria_desc=:p_atividade_secundaria_desc,
suframa=:p_suframa,
observacao=:p_observacao,
restricao_financeira=:p_restricao_financeira,
se_cliente=:p_se_cliente,
se_estrangeiro=:p_se_estrangeiro,
last_update=current_time,
last_owner=current_user,
status=:p_status
where id_cliente=:p_id_cliente;
-- atualiza estatistica de uso desse cliente
execute procedure SP_ESTATISTICAS 'CLIENTES',:p_id_cliente
returning_values :result_estatistica;
result_value=:p_id_cliente;
end
if (:p_acao='EXCLUIR') then
begin
select count(*) from clientes_contatos
where id_cliente=:p_id_cliente
into :next_id;
if (:next_id > 0) then
begin
EXCEPTION ERR 'Não posso eliminar um cliente enquanto houver contatos
relacionados a ele !';
suspend;
exit;
end
delete from internet_emails
where id_cliente=:p_id_cliente;
delete from internet_sites
where id_cliente=:p_id_cliente;
delete from telefones
where id_cliente=:p_id_cliente;
delete from clientes_assuntos
where id_cliente=:p_id_cliente;
delete from clientes_caracteristicas
where id_cliente=:p_id_cliente;
delete from clientes_ramos_atividade
where id_cliente=:p_id_cliente;
delete from clientes
where id_cliente=:p_id_cliente;
-- remove estatistica de uso desse cliente
execute procedure SP_ESTATISTICAS 'CLIENTES',:next_id,'','EXCLUIR'
returning_values :result_estatistica;
result_value=:p_id_cliente;
end
if (:p_acao='RANKING') then
begin
execute procedure SP_CLIENTES_RANKING returning_values
:next_id,:lrazao_social,:lsoma_recebido;
end
suspend;
end
Em 12 de setembro de 2013 10:51, Marcelo Borges <
borgesmarcelo em rocketmail.com> escreveu:
> Galera estou estudando sobre firebid e me enrosquei em procedure
> estou tentando fazer esta sp de insert e para no end : alguém sabe me
> dizer o que está errado?
>
>
> create or alter procedure grava_clientes(
> pnome varchar(100),
> prg varchar(20),
> pcpf varchar(20),
> pcnpj varchar(20),
> pincricao varchar(50),
> prazao
> varchar(50),
> pendereco varchar(50),
> pnumero varchar(6),
> pcomplemento varchar(50),
> pbairro varchar(50),
> pcidade varchar(50),
> pestado varchar(2),
> pcep varchar(20),
> ptelefone varchar(20),
> pcelular varchar(20),
> pemail varchar(50),
> pvalorcredito decimal(15,2),
> pdatainclusao date,
> pativo char(1),
> pusuario varchar(20),
> pobservacao varchar(250))
> as
> begin
> insert into clientes(nomeclienteempresa,
> rg,
> cpf,
> cnpj,
> incricaoestadual,
> razaosocial,
> endereco,
> numero,
> complemento,
> bairro,
> cidade,
> estado,
> cep,
> telefone,
> celular,
> email,
> valorcredito,
> datainclusao,
> ativo,
> usuario,
> observacao )
> values(
> :pnome,
> :prg,
> :pcpf,
> :pcnpj,
> :pincricao,
> :prazao,
> :pendereco,
> :pnumero,
> :pcomplemento,
> :pbairro,
> :pcidade,
> :pestado,
> :pcep,
> :ptelefone,
> :pcelular,
> :pemail,
> :pvalorcredito,
> :pdatainclusao,
> :pativo,
> :pusuario,
> :pobservacao)
> end --- da erro nesta linha e ja pesquisei e não sei como fazer(Dynamic
> SQL Error.SQL error code = -104.Token unknown
> -line 69, char 1.
> end.
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista