Fórum Dificuldade ao criar primeira procedure no oracle #401458
22/05/2011
0
tentei criar minha primeira procedure no oracle, mas retornou erro.
Meu objetivo era personalizar minha própria exception, dando a minha própria mensagem, mas pesquisei e não consegui.
Outra coisa foi que a mesma compilou com erro. Os erros são:
Error(3,25): PLS-00103: Encountered the symbol ";" when expecting one of the following: := . ) , @ % default character
Error(6,3): PLS-00103: Encountered the symbol ")" when expecting one of the following: := . ( @ % ; not null range default character
Podem me dar uma ajuda por favor?
CREATE OR REPLACE PROCEDURE SP_RESTRICOES( pTABELA INTEGER; pOPR VARCHAR2; pUSUARIO VARCHAR2 ) AS declare vEXCEPTION_COUNT EXCEPTION; PRAGMA_EXCEPTION_INIT(vEXCEPTION_COUNT, -1031); vCOUNT NUMBER; BEGIN SELECT COUNT(IDUSUARIO) FROM USUARIO WHERE IDUSUARIO = pUSUARIO INTO :vCOUNT; IF (vCOUNT = 0) THEN RAISE vEXCEPTION_COUNT; END IF; EXCEPTION WHEN vEXCEPTION_COUNT THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); WHEN OTHERS THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); END SP_RESTRICOES;
Nilo Souza
Curtir tópico
+ 0Posts
23/05/2011
Anthony Accioly
CREATE OR REPLACE PROCEDURE SP_RESTRICOES( pTABELA INTEGER, pOPR VARCHAR2, pUSUARIO VARCHAR2 ) IS
De uma olhada nos exemplos de procedures em http://psoug.org/reference/procedures.html. Se esbarrar em mais alguma coisa que não consiga resolver com os exemplos, é só postar suas dúvidas aqui de novo.
Abraços,
Gostei + 0
26/05/2011
Nilo Souza
Esta esta dando certo
create or replace
PROCEDURE ATUALIZARUSUARIO(pusuario in number,pnome in varchar2,pgrupo in number)
is
begin
update nsouza.usuario set nome=pnome,ID_GRUPO=pgrupo where IDUSUARIO=pusuario;
DBMS_OUTPUT.PUT_LINE('DADOS ATUALIZADOS');
commit;
exception
when others then
DBMS_OUTPUT.PUT_LINE('DADOS NÃO ATUALIZADOS');
ROLLBACK;
end ATUALIZARUSUARIO;
Esta esta dando o seguinte erro:
Error(7,4): PLS-00428: an INTO clause is expected in this SELECT statement
Quebrei a cabeça e não consegui resolver!!!
create or replace PROCEDURE SP_RESTRICOES (pUsuario in number)IS
BEGIN
select * from usuario where IDUSUARIO=pusuario;
DBMS_OUTPUT.PUT_LINE('DADOS ATUALIZADOS');
commit;
exception
when others then
DBMS_OUTPUT.PUT_LINE('DADOS NÃO ATUALIZADOS');
ROLLBACK;
END SP_RESTRICOES;
/
Gostei + 0
27/05/2011
Deivison Melo
ptabela NUMBER,
popr VARCHAR2,
pusuario varchar2
)
is vexception_count exception;
pragma exception_init(vexception_count, -1031);
vcount number;
begin
select count(idusuario)
into vcount
from usuario
where upper(idusuario) = upper(pusuario); if (vcount = 0) then
raise vexception_count;
end if; exception
when vexception_count then
/*o sqlerrm já mostra o código e descrição do erro*/
raise_application_error(-20001,'Erro 01 - '||'erro: '||sqlerrm);
when others then
raise_application_error(-20002,'Erro 02 - '||'erro: '||sqlerrm);
end;
Gostei + 0
27/05/2011
Nilo Souza
Gostei + 0
27/05/2011
Rafael Mattos
vCount: ele criou para receber qtde de usuarios
Into: Serve para jogar o valor dentro da variavel
Gostei + 0
27/05/2011
Nilo Souza
Gostei + 0
27/05/2011
Rafael Mattos
* from não o correto seria vc fazer assim
----------------------
vcampo1 varchar(10);
vcampo2 varchar(10);
begin
select campo1, campo2 from usuario
into :vcampo1, vcampo2;
end
----------------------
qualquer banco q vc trabalhe vai ser parecida a regra o que muda vai ser a forma de declarar a variavel
Gostei + 0
27/05/2011
Nilo Souza
vcampo2 varchar(10);
begin
select nome, login from usuario
into :vcampo1, vcampo2 where idUsuario = psusuario (nota: pusuario é o paremetro da procedure)
end
Gostei + 0
27/05/2011
Rafael Mattos
begin
select nome, login from usuario
where idUsuario = psusuario (nota: pusuario é o paremetro da procedure)
and campo = :outrofiltro
into :vcampo1, vcampo2 where
end
Gostei + 0
27/05/2011
Nilo Souza
ficou meio confuso. Pq 2 where, poderia fazer mais simples?
select nome, login from usuario
where idUsuario = psusuario (nota: pusuario é o paremetro da procedure)
and campo = :outrofiltro
into :vcampo1, vcampo2 where
Gostei + 0
28/05/2011
Nilo Souza
Gostei + 0
28/05/2011
Anthony Accioly
Se sim, por favor feche o chamado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)