pool 0 Denunciar post Postado Julho 26, 2012 Boa tarde estou estudando essa procedure e parei esse erro da linha 10, oq é esse erro? create or replace PROCEDURE PRC_CL_USUARIO_GRUPO_ACESSO IS PRC_OPCAO CHAR(1); PR_ID_GRUPO INT; PR_ID_USUARIO INT; PR_DT_INCLUSAO DATE; PR_DT_ALTERACAO DATE; PR_ATIVO INT; BEGIN DECLARE CONT INT; -- (ERROR na linha 10: PLS-00488: declaração inválida de variável: o objeto 'CONT' deve ser um tipo ou subtipo) SET CONT :=0; BEGIN IF PRC_OPCAO = 'I' THEN BEGIN SELECT CONT INTO CL_USUARIO_GRUPO_ACESSO FROM CL_USUARIO_GRUPO_ACESSO WHERE CL_USUARIO_GRUPO_ACESSO := PRC_CL_USUARIO_GRUPO_ACESSO; IF (CONT != 1) THEN INSERT INTO CL_USUARIO_GRUPO_ACESSO VALUES( PR_ID_GRUPO , PR_ID_USUARIO , PR_DT_INCLUSAO , PR_DT_ALTERACAO, PR_ATIVO ); ELSE IF (PRC_OPCAO ='U') THEN BEGIN UPDATE CL_USUARIO_GRUPO_ACESSO SET CL_USUARIO_GRUPO_ACESSO = PR_CL_USUARIO_GRUPO_ACESSO, ID_USUARIO = PR_ID_USUARIO , DATA_ALTERACAO = PR_DT_ALTERACAO, ATIVO = PR_ATIVO WHERE ID_GRUPO = PR_ID_GRUPO ; END; ELSE UPDATE CL_USUARIO_GRUPO_ACESSO SET DATA_ALTERACAO = PR_DT_ALTERACAO, ATIVO = 0 WHERE ID_GRUPO = PR_ID_GRUPO; END IF; END IF; END; END IF; END; END PRC_CL_USUARIO_GRUPO_ACESSO; desde ja grato Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 26, 2012 Não use INT use NUMBER; Não use SET atribua diretamente; ABC := 123; O resto parece correto. Compartilhar este post Link para o post Compartilhar em outros sites
pool 0 Denunciar post Postado Julho 28, 2012 Não use INT use NUMBER; Não use SET atribua diretamente; ABC := 123; O resto parece correto. Desde já obrigado Motta arrumei e deu outro erro na linha 15 olha: create or replace PROCEDURE PRC_CL_USUARIO_GRUPO_ACESSO IS PRC_OPCAO CHAR(1); PR_ID_GRUPO NUMBER; PR_ID_USUARIO NUMBER; PR_DT_INCLUSAO DATE; PR_DT_ALTERACAO DATE; PR_ATIVO NUMBER; BEGIN DECLARE CONT NUMBER := 0; BEGIN IF PRC_OPCAO = 'I' THEN BEGIN SELECT CONT INTO CL_USUARIO_GRUPO_ACESSO FROM CL_USUARIO_GRUPO_ACESSO WHERE CL_USUARIO_GRUPO_ACESSO = PRC_CL_USUARIO_GRUPO_ACESSO; -- [u]ERROR na linha 15: PL/SQL: ORA-00904: "PRC_CL_USUARIO_GRUPO_ACESSO": identificador inválido[/u] IF (CONT != 1) THEN INSERT INTO CL_USUARIO_GRUPO_ACESSO VALUES( PR_ID_GRUPO , PR_ID_USUARIO , PR_DT_INCLUSAO , PR_DT_ALTERACAO, PR_ATIVO ); ELSE IF (PRC_OPCAO ='U') THEN BEGIN UPDATE CL_USUARIO_GRUPO_ACESSO SET CL_USUARIO_GRUPO_ACESSO = PR_CL_USUARIO_GRUPO_ACESSO, ID_USUARIO = PR_ID_USUARIO , DATA_ALTERACAO = PR_DT_ALTERACAO, ATIVO = PR_ATIVO WHERE ID_GRUPO = PR_ID_GRUPO ; END; ELSE UPDATE CL_USUARIO_GRUPO_ACESSO SET DATA_ALTERACAO = PR_DT_ALTERACAO, ATIVO = 0 WHERE ID_GRUPO = PR_ID_GRUPO; END IF; END IF; END; END IF; END; END PRC_CL_USUARIO_GRUPO_ACESSO; Li um pouco pesquisando antes de postar e achei um comentario seu dizendo q a tabela poderia ñ existir por via das duvidas dei um select depois exclui e recriei a tabela CL_USUARIO_GRUPO_ACESSO e tbm a PROCEDURE PRC_CL_USUARIO_GRUPO_ACESSO + o erro continua! Desde já grato! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 28, 2012 Um select (sem cursor) em plsql deve retornar os valores para variáveis de memória SELECT CONT INTO CL_USUARIO_GRUPO_ACESSO faça SELECT COUNT(*) INTO VN_QTD ... IF (VN_QTD != 1) THEN defina esta variável create or replace PROCEDURE PRC_CL_USUARIO_GRUPO_ACESSO IS PRC_OPCAO CHAR(1); PR_ID_GRUPO NUMBER; PR_ID_USUARIO NUMBER; PR_DT_INCLUSAO DATE; PR_DT_ALTERACAO DATE; PR_ATIVO NUMBER; VN_QTD number; Se você procurar encontra bom material público sobre plsql, no site da Oracle inclusive. Compartilhar este post Link para o post Compartilhar em outros sites
pool 0 Denunciar post Postado Julho 29, 2012 Mais Eu já não declarei o cont q eu usei? ou aqui ele o (cont) ñ é global? ou ñ tem nd haver? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 29, 2012 A sua sintaxe só seria aceita de CONT fosse coluna de CL_USUARIO_GRUPO_ACESSO . Era isto ou uma contagem de registros ? Compartilhar este post Link para o post Compartilhar em outros sites
pool 0 Denunciar post Postado Julho 30, 2012 Esse cont é uma variavél é utilizada para armazenar o resultado do select. Sendo assim como devo fazer? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 30, 2012 SELECT COUNT(*) INTO VN_QTD ... Compartilhar este post Link para o post Compartilhar em outros sites
pool 0 Denunciar post Postado Julho 31, 2012 POXA MOTTA DESC SE ESTOU SENDO CHATO + O ERRO CONTINUA! SEGUE O CODIGO: CREATE OR REPLACE PROCEDURE PRC_CL_USUARIO_GRUPO_ACESSO IS PRC_OPCAO CHAR(1); PR_ID_GRUPO NUMBER; PR_ID_USUARIO NUMBER; PR_DT_INCLUSAO DATE; PR_DT_ALTERACAO DATE; PR_ATIVO NUMBER; VN_QTD NUMBER; BEGIN DECLARE CONT NUMBER := 0; BEGIN IF PRC_OPCAO = 'I' THEN BEGIN SELECT COUNT(*) INTO VN_QTD FROM CL_USUARIO_GRUPO_ACESSO WHERE CL_USUARIO_GRUPO_ACESSO = PRC_CL_USUARIO_GRUPO_ACESSO; IF (VN_QTD != 1) THEN INSERT INTO CL_USUARIO_GRUPO_ACESSO VALUES( PR_ID_GRUPO , PR_ID_USUARIO , PR_DT_INCLUSAO , PR_DT_ALTERACAO, PR_ATIVO ); ELSE IF (PRC_OPCAO ='U') THEN BEGIN UPDATE CL_USUARIO_GRUPO_ACESSO SET CL_USUARIO_GRUPO_ACESSO = PR_CL_USUARIO_GRUPO_ACESSO, ID_USUARIO = PR_ID_USUARIO , DATA_ALTERACAO = PR_DT_ALTERACAO, ATIVO = PR_ATIVO WHERE ID_GRUPO = PR_ID_GRUPO ; END; ELSE UPDATE CL_USUARIO_GRUPO_ACESSO SET DATA_ALTERACAO = PR_DT_ALTERACAO, ATIVO = 0 WHERE ID_GRUPO = PR_ID_GRUPO; END IF; END IF; END; END IF; END; END PRC_CL_USUARIO_GRUPO_ACESSO; --SEGUE O ERRO: ERROR na linha 16: PL/SQL: ORA-00904: "PRC_CL_USUARIO_GRUPO_ACESSO": identificador inválido Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 31, 2012 SELECT ... WHERE CL_USUARIO_GRUPO_ACESSO = PRC_CL_USUARIO_GRUPO_ACESSO; No WHERE tem de ser uma coluna da tabela e a condição, algo assim ... IS VS_PR_ID_GRUPO CL_USUARIO_GRUPO_ACESSO.PR_ID_GRUPO%TYPE; ... SELECT ... WHERE CL_USUARIO_GRUPO_ACESSO.PR_ID_GRUPO = VS_PR_ID_GRUPO; Outra coisa, não dê as variáveis os mesmos nomes das colunas da tabela , confunde (quem lê e o compilador). No mais só no ambiente para ver se está correto. Compartilhar este post Link para o post Compartilhar em outros sites
pool 0 Denunciar post Postado Agosto 1, 2012 Ola Motta agora resolveu, fiz assim ó: CREATE OR REPLACE PROCEDURE PRC_CL_USUARIO_GRUPO_ACESSO IS PRC_OPCAO CHAR(1); PR_ID_GRUPO NUMBER; PR_ID_USUARIO NUMBER; PR_DT_INCLUSAO DATE; PR_DT_ALTERACAO DATE; PR_ATIVO NUMBER; BEGIN DECLARE CONT NUMBER := 0; BEGIN IF PRC_OPCAO = 'I' THEN BEGIN SELECT 1 INTO CONT FROM CL_USUARIO_GRUPO_ACESSO WHERE ID_GRUPO = PR_ID_GRUPO; IF (CONT != 1) THEN INSERT INTO CL_USUARIO_GRUPO_ACESSO VALUES( PR_ID_GRUPO , PR_ID_USUARIO , PR_DT_INCLUSAO , PR_DT_ALTERACAO, PR_ATIVO ); ELSE IF (PRC_OPCAO ='U') THEN BEGIN UPDATE CL_USUARIO_GRUPO_ACESSO SET ID_USUARIO = PR_ID_USUARIO , DATA_ALTERACAO = PR_DT_ALTERACAO, ATIVO = PR_ATIVO WHERE ID_GRUPO = PR_ID_GRUPO ; END; ELSE UPDATE CL_USUARIO_GRUPO_ACESSO SET DATA_ALTERACAO = PR_DT_ALTERACAO, ATIVO = 0 WHERE ID_GRUPO = PR_ID_GRUPO; END IF; END IF; END; END IF; END; END PRC_CL_USUARIO_GRUPO_ACESSO; problema resolvido! DESDE JÀ OBRIGADO você TEM ALGO A ACRESCENTAR? Compartilhar este post Link para o post Compartilhar em outros sites