AJUDA EM COMO CHAMAR UMA PROCEDURE NO SQLPLUS

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
emer_rosa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Sáb, 28 Ago 2010 10:45 am
Localização: Torres-RS
Emerson E. Rosa

olá, preciso criar um script que vai ser executado pelo SQLPLUS para Chamar uma Procedure, o Codigo executando no TOAD por exemplo é o abaixo:

Selecionar tudo

DECLARE
SAIDA VARCHAR2(255);
BEGIN
importapedidos(2,303,SAIDA);
END;
Como faço o mesmo para executar no SQL PLUS ?, pois o mesmo não funciona, a procedure é "importapedidos"

Tem como quando executar o script no SQLPLUS, vo fazer um bat que chama e conecta, ele pedir as variaveis para o usuario digitar?, no codigo acima o "2,303" são as variaveis, CODIGO DA EMPRESA, E CODIGO DO VENDEDOR, ai o usuario não precisaria entrar no script e mudar manualmente.

Se alguém puder ajudar agradeço.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Tente desta forma:

Selecionar tudo

DECLARE
SAIDA VARCHAR2(255);
BEGIN
importapedidos(&cod_empresa,&cod_vendedor,SAIDA);
END; 
/
No SQL*Plus você deve colocar um "/" ao finao de um bloco PL/SQL, da forma como está no código acima...
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Nossa, consegui escrever "final" com "o"... :oops:
emer_rosa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Sáb, 28 Ago 2010 10:45 am
Localização: Torres-RS
Emerson E. Rosa

Mais Bahhhhh, Perfeito, Showwww de Bola, era isso mesmo, e ainda pede as variaveis na tela, funcionou perfeitamente.

Mais uma coisa, eu to fazendo o seguinte, eu baixei um programinha que converte .bat em exe, para compilar ele e não ficar aparecendo as senhas do banco de dados.....

ai eu to criando um .bat e tem o script que bat chama pelo "@", já tentei colocar dentro do mesmo script do .bat, é possível?


Muito Obrigado Burga.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

No windows nunca vi algo parecido com o <<EOF / EOF do Unix...
Não tem muito como fugir de usar um arquivo separado e chamá-lo usando @.
emer_rosa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Sáb, 28 Ago 2010 10:45 am
Localização: Torres-RS
Emerson E. Rosa

Hum, mais beleza, coloquei um @echo off já some as senhas, o script se abrirem não tem nada de mais dentro, so não queria deixar a senha do banco de dados visivel.

Ricardo, sem querer se chato, mais tens como me ajudar na trigger abaixo?

Selecionar tudo

CREATE OR REPLACE TRIGGER VALIDA_INC_UPD_TGFITE
BEFORE INSERT OR UPDATE
ON SANKHYA.TGFITE 
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
P_CODVOL     TGFVOA.CODVOL%TYPE;
P_CODTIPOPER TGFCAB.CODTIPOPER%TYPE;

/* TRIGGER POR EMERSON PARA não DEIXAR lançar NOTA DE ENTRADA ERRADA, COM CODVOL ERRADO */

BEGIN
SELECT VOA.CODVOL,CAB.CODTIPOPER
    INTO P_CODVOL, P_CODTIPOPER 
    FROM  TGFVOA VOA, TGFCAB CAB
    WHERE VOA.CODPROD = :NEW.CODPROD AND CAB.NUNOTA = :NEW.NUNOTA;
IF P_CODTIPOPER IN (80,81,82,89,90) THEN
    IF :NEW.CODVOL <> P_CODVOL THEN
        RAISE_APPLICATION_ERROR(-20101, 'CODIGO DO VOLUME DIFERENTE DA UNIDADE DE COMPRA, VER UNIDADE DE COMPRA DO ITEM');
      END IF;
END IF;
END;
/
Ela funcionou Perfeito no que eu queria,quando um usuario for lançar uma nota com os codigos de operação 80,81,82,89,90 ele tem que usar o volume certo, não deixa ele lançar errado.

O problema é que como o select acima liga as tabelas TGFVOA, TGFCAB, TGFITE da problema em outras notas que por exemplo não tenha o item na TGFVOA, operações que não exigem que o produto tem CODVOL.

Outro exemplo e a nota de credito de importo de energia eletrica, usa um coddigo de operação bem diferente dos acima, mais não tem itens dentro da nota, e ai não deixa lançar da erro "END OF TABLE" pois não acha a ligação com a TGFVOA, se eu colocar o select para depois do IF não funciona nada dai.

Muito Grato pelas dicas do SQLPLUS, se souber da trigger abradeço, Abraço.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Na sua consulta, acredito que você deva utilizar um OUTER JOIN. Assim, mesmo que não exista um TGFVOA ou um TGFCAB um registro ainda é retornado... Mas deve-se lembrar de tratar casos de retornos NULOS nas colunas.

Algo do tipo:

Selecionar tudo

SELECT VOA.CODVOL,CAB.CODTIPOPER
    INTO P_CODVOL, P_CODTIPOPER
    FROM  TGFVOA VOA FULL OUTER JOIN TGFCAB CAB
     ON VOA.CODPROD = :NEW.CODPROD AND CAB.NUNOTA = :NEW.NUNOTA; 
Depois você altera os "IF" pra considerar NULOS de acordo com as regras de negócio do sistema...
emer_rosa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Sáb, 28 Ago 2010 10:45 am
Localização: Torres-RS
Emerson E. Rosa

Não deu, ta dando um erro em todos lançamentos:

ORA-01422:a extração exata retorna mais do que o número solicitado de linhas.

Vo tentar mudar a estrutura dela, para olhar primeiro na CAB e colocar um return para tentar não executar os select em outras operação.

Valeuuu.
Responder
  • Informação
  • Quem está online

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