[firebase-br] Erro em stored procedure
Reijanio Nunes Ribeiro
rnribeiro em gmail.com
Ter Mar 12 01:51:36 -03 2013
Bom dia estou com o seguinte problemas
tenho esta tabela que gravas as configurações de perfis de todos os
usuarios do sistema
CREATE TABLE PERFIS_CONF (
ACAO VARCHAR(40) NOT NULL,
PERFIL VARCHAR(20) NOT NULL,
PERMISSAO VARCHAR(1),
ACAO_NOME VARCHAR(60)
);
criei uma rotina que grava todos os action do form principal e salva numa
tabela chamada menu essa rotina funciona muito bem porem criei uma sp que
vai alimentar a tabela acima que é a sintaxe abaixo ela na teoria varre a
tabela menu e joga na tabela perfis_conf o novo menu criado assim não
preciso ter que excluir e criar de novo o perfil
CREATE OR ALTER PROCEDURE SP_PERMISSOES (
p_acao varchar(100),
p_login varchar(100),
p_perm char(1),
p_acao_nome varchar(100))
as
begin
for select ACAO_NOME from MENU
into :p_acao_nome do
begin
if(Exists(select * from PERFIS_CONF WHERE ACAO_NOME =:p_acao_nome))then
begin
-- NÃO FAZ NADA
end
else
begin
insert into PERFIS_CONF(ACAO, perfil, PERMISSAO, ACAO_NOME)
values
(
:p_acao,
:p_login,
:p_perm,
:p_acao_nome
);
end
end
porem ta dando o seguinte erro quando tento usar esta sp
EXECUTE procedure sp_permissoes('TESTE', 'ADMINISTRADOR', 'N', 'AC_CAIXA')
este erro tem acontecido sempre que tento usar esta sp
Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "INTEG_24" on table
"PERFIS_CONF".
At procedure 'SP_PERMISSOES'.
o engraçado é que se uso pelo delphi esta rotina funciona sem problemas
var
i : integer;
begin
dm.Perfis_Conf.Open;
//carrega os actions
if DM.Perfis_Conf.RecordCount >= 0 then
for i := 1 to F_Principal.ComponentCount do
begin
dm.Perfis_Conf.Delete;
dm.Perfis_Conf.ApplyUpdates(0);
end;
for i := 0 to F_Principal.ComponentCount - 1 do
if F_Principal.Components[i] is taction then
begin
DM.Perfis_Conf.Insert;
//DM.Perfis_Conf.Append;
DM.Perfis_ConfACAO.AsString :=
TAction(F_Principal.Components[i]).Caption;
DM.Perfis_ConfACAO_NOME.AsString :=
TAction(F_Principal.Components[i]).Name;
DM.Perfis_ConfPERMISSAO.AsString := 'N';
dm.Perfis_conf.ApplyUpdates(0);
end;
//vamos atualizar os dados
dm.Perfis_conf.Close;
dm.Perfis_conf.Open;
end;
alguem pode me dar uma dica de como resolver isto
--
Reijanio Nunes Ribeiro
Desenvolvedor Delphi/Php
Suporte em TI
Mais detalhes sobre a lista de discussão lista