Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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; 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
>
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; 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!
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.
Mais Eu já não declarei o cont q eu usei?
ou aqui ele o (cont) ñ é global?
ou ñ tem nd haver?
A sua sintaxe só seria aceita de CONT fosse coluna de CL_USUARIO_GRUPO_ACESSO .
Era isto ou uma contagem de registros ?
Esse cont é uma variavél é utilizada para armazenar o resultado do select.
Sendo assim como devo fazer?
SELECT COUNT(*) INTO VN_QTD ...
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; 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
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.
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; 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?
O resto parece correto.