[firebase-br] Ajuda com Stored procedure

Reijanio Nunes Ribeiro rnribeiro em gmail.com
Ter Mar 12 01:30:03 -03 2013


Boa dia a todos estou com um pequenino problema que é o seguinte tenho uma
rotina de banco dedados que faz o controle de usuraio juntamente com
actionlist do delphi, e funciona té bem embora ainda não esteja
completamente implementada agora esstou com o seguinte problema

tenho as seguintes tabelas
perfis_conf
CREATE TABLE PERFIS_CONF (
    ACAO       VARCHAR(40) NOT NULL,
    PERFIL     VARCHAR(20) NOT NULL,
    PERMISSAO  VARCHAR(1),
    ACAO_NOME  VARCHAR(60)
);

ALTER TABLE PERFIS_CONF ADD PRIMARY KEY (ACAO, PERFIL);
ALTER TABLE PERFIS_CONF ADD CONSTRAINT FK_PERFIS_CONF_1 FOREIGN KEY
(PERFIL) REFERENCES PERFIL (PERFIL) ON DELETE CASCADE ON UPDATE CASCADE;

até ai lz ta funcionando sem problemas

agora vem o problema estou c riando uma rotina que mapeia qualquer mudança
n quantdidade de actionlist que possa ter na tela isso na pratica serve pra
mim não ter que apagar um perfil inteiro e recria-lo toa vez que inserir um
menu novo por que isto é muito chato então criei uma tabela que atrelada a
uma rotina lr todos os actions do form principal e salva nessa tabela toda
vez que alguem acessa o sistema caso ele cnstate algguma mudança na
quantidade de action criei esta sp para que ele insira automaticamente o
novo menu no sistema porem esta dando todo tipo de erro desde list index
out of bound ou simplesmente tentando pelo ibexpert da erro de primary key
ja estou em opções e conto com a ajuda dos amigos

a sintaxe é +- assim
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

mais toda vez uso esta ssintaxe
EXECUTE procedure sp_permissoes('TESTE', 'ADMINISTRADOR', 'N', 'AC_CAIXA')

porem da esse erro pra qualquer coisa que lançar, o erro é este

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'.

desde ja grato pela ajuda

-- 
Reijanio Nunes Ribeiro
Desenvolvedor Delphi/Php
Suporte em TI



Mais detalhes sobre a lista de discussão lista