Apanhando para procedure

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
mtsys
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Ter, 06 Abr 2010 10:43 am
Localização: Palhoça / SC

Pessoal estou apanhando para fazer procedures no Oracle.
Sempre usei SQL Server, e agora tenho que fazer algumas coisas no Oracle.

1º Procedure com status invalid

Selecionar tudo

CREATE OR REPLACE PROCEDURE bdautolab.prCFornecedor (vCofFornecedor integer)
IS
BEGIN
         
END prCFornecedor;
porque o código acima compila mas diz que é invalida nas propriedades da procedure

2º Não consigo executar a procedure

Selecionar tudo

CREATE OR REPLACE PROCEDURE addesenv.SP_CIDADES (
  vCOD_CIDADE  INTEGER,
  vNOME       VARCHAR2,
  vUF         CHAR,
  vOPR        CHAR)
IS
 vEXCEPTION EXCEPTION;
BEGIN  
    IF (vOPR = 'I') THEN
        INSERT INTO CIDADES(COD_CIDADE, NOME, UF) VALUES (vCOD_CIDADE, vNOME, vUF);
    ELSE
    IF(vOPR = 'A') THEN
        UPDATE CIDADES SET NOME = NOME, UF = vUF WHERE COD_CIDADE = vCOD_CIDADE;
    ELSE
    IF(vOPR = 'D')THEN
        DELETE FROM CIDADES WHERE COD_CIDADE = vCOD_CIDADE;
    ELSE
        RAISE vEXCEPTION;
    END IF;
    END IF;
    END IF;
     EXCEPTION
     WHEN vEXCEPTION THEN
        RAISE_APPLICATION_ERROR(-20999,'ATENÇÃO! Operação diferente de I, D, A.', FALSE);
END SP_CIDADES;
A procedure SP_CIDADES eu rodo, compila e é valida.

Porém quando tento execuar
execute sp_cidades (1, 'COLATINA', 'ES', 'I') ou
exec sp_cidades (1, 'COLATINA', 'ES', 'I') ou
sp_cidades (1, 'COLATINA', 'ES', 'I')

dá erro ORA-00900

O que eu estou fazendo de cagadas?

[]s

Marlon
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Veja o ELSE é ELSIF, para ELSE encadeado, no outro código você deve por pelo menos o codigo NULL dentro do begin; end;

após você rodar a procedure, digite show errors para ver o erro que gerou, na compilação.

aconselho você utilizar o PL/SQL Developer ou SQL Developer da Oracle pra desenvolver rotinas PL/SQL, é bem mais fácil.

[code
CREATE OR REPLACE PROCEDURE SP_CIDADES (
vCOD_CIDADE INTEGER,
vNOME VARCHAR2,
vUF CHAR,
vOPR CHAR)
IS
vEXCEPTION EXCEPTION;
BEGIN
IF (vOPR = 'I') THEN
INSERT INTO CIDADES(COD_CIDADE, NOME, UF) VALUES (vCOD_CIDADE, vNOME, vUF);
ELSIF(vOPR = 'A') THEN
UPDATE CIDADES SET NOME = NOME, UF = vUF WHERE COD_CIDADE = vCOD_CIDADE;
ELSIF(vOPR = 'D')THEN
DELETE FROM CIDADES WHERE COD_CIDADE = vCOD_CIDADE;
ELSE
RAISE vEXCEPTION;
END IF;
EXCEPTION
WHEN vEXCEPTION THEN
RAISE_APPLICATION_ERROR(-20999,'ATENÇÃO! Operação diferente de I, D, A.', FALSE);
END SP_CIDADES;
[/code]
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes