[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