Passagem de Parâmetro numa Procedure em PL/SQL

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
marciosc
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 09 Nov 2007 10:28 am
Localização: Blumenau-SC
:)
Márcio

Bom dia !

Estou precisando passar um parâmetro (cod_empresa) numa procedure a fim de atualizar determinados registros de uma tabela baseando-se no código da empresa.
Pretendo dar vários call's cada um para uma empresa diferente.

Como devo proceder para passar o parâmetro no call e no where pegar somente a empresa do parâmetro ?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Dá uma olhadinha neste exemplo:

Selecionar tudo

CREATE OR REPLACE PROCEDURE PRC_PARAMETRO (P_COD_EMPRESA IN NUMBER)
IS
  V_NOME_EMPRESA VARCHAR2(100); 
BEGIN
  SELECT NOME_EMPRESA
    INTO V_NOME
   FROM TAB_EMPRESA
		WHERE COD_EMPRESA = P_COD_EMPRESA; 
EXCEPTION 
  ...     
END;
Se não for isso q precisa, dá um alô.
marciosc
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 09 Nov 2007 10:28 am
Localização: Blumenau-SC
:)
Márcio

Boa tarde Trevisolli !

Grato por responder.

Como fica o EXECUTE para chamar com o parâmetro ?

Selecionar tudo

EXECUTE pck_gera_item_sup.INSERE_CONTABEIS '01' 
?

Obrigado.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Fica assim brother:

Selecionar tudo

PRC_PARAMETRO(01);
SE estiver em uma PACKAGE:

Selecionar tudo

PCK_PARAMETRO.PRC_PARAMETRO(01);
qualquer coisa, manda ai.
marciosc
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 09 Nov 2007 10:28 am
Localização: Blumenau-SC
:)
Márcio

Ainda não foi dessa vez brother !
O parâmetro é um char(02).

Selecionar tudo

SQL> EXECUTE pck_gera_item_sup.INSERE_CONTABEIS('01');
BEGIN pck_gera_item_sup.INSERE_CONTABEIS('01'); END;

      *
ERRO na linha 1:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'INSERE_CONTABEIS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
marciosc
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 09 Nov 2007 10:28 am
Localização: Blumenau-SC
:)
Márcio

Trevisolli ! Só para você conseguir visualizar melhor. Estou achando que há algo errado nas declarações de PCk ou PRC.

Selecionar tudo

CREATE OR REPLACE PACKAGE pck_gera_item_sup IS PROCEDURE INSERE_CONTABEIS;
END;
/
CREATE OR REPLACE PROCEDURE INSERE_CONTABEIS (P_COD_EMPRESA IN CHAR(02))
END ;
/
CREATE OR REPLACE PACKAGE BODY pck_gera_item_sup IS
    PROCEDURE INSERE_CONTABEIS IS
    TYPE contabeis_rectype IS RECORD
      (cod_empresa          CHAR(02),
       cod_item             CHAR(15),
       ies_tip_item         CHAR(1),
       grupo                CHAR(02) );

    contabeis_rec contabeis_rectype;

    existe_record CHAR := 'N';
-- Define e inicializa variaveis contadores
    pl_qtd_item_sup_produzidos    number(10) := 0;
    pl_qtd_item_sup_finais        number(10) := 0;
    pl_qtd_item_sup_compl         number(10) := 0;
    pl_qtd_item_param_produzidos  number(10) := 0;
    pl_qtd_item_param_finais      number(10) := 0;
    pl_contador                   number(10) := 0;

    BEGIN
      DECLARE
        CURSOR contabeis_cur IS
        SELECT A.COD_EMPRESA,A.COD_ITEM,A.IES_TIP_ITEM,SubStr(A.COD_ITEM,1,2) GRUPO
        FROM ITEM A
        WHERE A.COD_EMPRESA = '01'
          AND ( A.IES_TIP_ITEM  = 'F' OR 
                A.IES_TIP_ITEM  = 'B' OR
                A.IES_TIP_ITEM  = 'P' OR
               (A.IES_TIP_ITEM  = 'C' AND A.COD_ITEM LIKE '08%') )
          AND NOT EXISTS (SELECT *
                          FROM ITEM_SUP B
                          WHERE B.COD_EMPRESA = A.COD_EMPRESA
                            AND B.COD_ITEM    = A.COD_ITEM );

        BEGIN
         IF  contabeis_cur%ISOPEN THEN
             CLOSE  contabeis_cur;
         END IF;

         OPEN contabeis_cur;
         LOOP
        .....................
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Na SPEC da tua package, declare a procedure com o parâmetro:

Selecionar tudo

CREATE OR REPLACE PACKAGE pck_gera_item_sup IS 
 PROCEDURE   INSERE_CONTABEIS(P_COD_EMPRESA IN CHAR(02)); 
END; 
Editado pela última vez por Trevisolli em Sex, 09 Nov 2007 1:35 pm, em um total de 1 vez.
marciosc
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 09 Nov 2007 10:28 am
Localização: Blumenau-SC
:)
Márcio

Está faltando peça no quebra-cabeça brother.
Deu caca de novo...

Selecionar tudo

CREATE OR REPLACE PACKAGE pck_gera_item_sup IS PROCEDURE INSERE_CONTABEIS (P_COD_EMPRESA IN CHAR(02) ) ;

PLS-00103: Encountered the symbol "(" when expecting one of the following:

   := ) , default varying character large
The symbol ":=" was substituted for "(" to continue.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Posta teu código todo aqui pra gente, pode seR?
Outra coisa, esqueci de um parêntese na SPEC no trecho anterior e o corrigi.
Segue novamente:

Selecionar tudo

CREATE OR REPLACE PACKAGE pck_gera_item_sup IS 
 PROCEDURE   INSERE_CONTABEIS(P_COD_EMPRESA IN CHAR(02)); 
END; 
marciosc
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sex, 09 Nov 2007 10:28 am
Localização: Blumenau-SC
:)
Márcio

Segue comando amigo.
:-o

Selecionar tudo

CREATE OR REPLACE PACKAGE pck_gera_item_sup IS PROCEDURE INSERE_CONTABEIS; 
END; 
/
CREATE OR REPLACE PROCEDURE INSERE_CONTABEIS(P_COD_EMPRESA IN CHAR(02));
END ;
/
CREATE OR REPLACE PACKAGE BODY pck_gera_item_sup IS
    PROCEDURE INSERE_CONTABEIS IS
    TYPE contabeis_rectype IS RECORD
      (cod_empresa          CHAR(02),
       cod_item             CHAR(15),
       ies_tip_item         CHAR(1),
       grupo                CHAR(02) );

    contabeis_rec contabeis_rectype;

    existe_record CHAR := 'N';
-- Define e inicializa variaveis contadores
    pl_qtd_item_sup_produzidos    number(10) := 0;
    pl_qtd_item_sup_finais        number(10) := 0;
    pl_qtd_item_sup_compl         number(10) := 0;
    pl_qtd_item_param_produzidos  number(10) := 0;
    pl_qtd_item_param_finais      number(10) := 0;
    pl_contador                   number(10) := 0;

    BEGIN
      DECLARE
        CURSOR contabeis_cur IS
        SELECT A.COD_EMPRESA,A.COD_ITEM,A.IES_TIP_ITEM,SubStr(A.COD_ITEM,1,2) GRUPO
        FROM ITEM A
        WHERE A.COD_EMPRESA = '01'
          AND A.IES_TIP_ITEM  = 'F'
          AND NOT EXISTS (SELECT *
                          FROM ITEM_SUP B
                          WHERE B.COD_EMPRESA = A.COD_EMPRESA
                            AND B.COD_ITEM    = A.COD_ITEM );

        BEGIN
         IF  contabeis_cur%ISOPEN THEN
             CLOSE  contabeis_cur;
         END IF;

         OPEN contabeis_cur;
         LOOP
           IF  contabeis_rec.ies_tip_item = 'F' THEN
               FETCH contabeis_cur INTO contabeis_rec;
               dbms_output.put_line('Tipo 08 '||contabeis_rec.cod_empresa||' '||contabeis_rec.cod_item);
               EXIT WHEN contabeis_cur%NOTFOUND;
               existe_record := 'S';
    -- conforme e-mail enviado pelo Osni à Gilmara em 18/09/2007 devem ser considerados acabados
    -- todos os itens 80 à 90
               IF  (contabeis_rec.grupo <> '80' AND contabeis_rec.grupo <> '81'  AND contabeis_rec.grupo <> '82' AND
                    contabeis_rec.grupo <> '83' AND contabeis_rec.grupo <> '84'  AND contabeis_rec.grupo <> '85' AND
                    contabeis_rec.grupo <> '86' AND contabeis_rec.grupo <> '87'  AND contabeis_rec.grupo <> '88' AND
                    contabeis_rec.grupo <> '89' AND contabeis_rec.grupo <> '90') OR contabeis_rec.ies_tip_item = 'B' THEN
                    INSERT INTO ITEM_SUP VALUES (contabeis_rec.cod_empresa,contabeis_rec.cod_item,'N','N',1510,0,0,' ',NULL,' ','113010102',NULL,NULL,0,0,0,0,0,0,0,'S',1,0,0,0,0,0,0,0,0,0,NULL,0,'O','O','151',105,'D');
                    pl_qtd_item_sup_produzidos := pl_qtd_item_sup_produzidos + 1;
               END IF;
           END IF;
        End Loop;
        CLOSE contabeis_cur;
        IF  existe_record = 'N' THEN
            dbms_output.put_line('Não existem registros a processar');
        END IF;
      EXCEPTION
        WHEN OTHERS THEN
          Raise_Application_Error(-20999,'Erro de Execução. '||SQLERRM);
      END;
    END;
END;
/
EXECUTE pck_gera_item_sup.INSERE_CONTABEIS('01');
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

velho tenta dar uma olhada na declareção do espec

Selecionar tudo

CREATE OR REPLACE PACKAGE pck_gera_item_sup IS PROCEDURE INSERE_CONTABEIS;
 PROCEDURE INSERE_CONTABEIS(P_COD_EMPRESA IN CHAR);
END;
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

ops.. desculpe... corrigindo

Selecionar tudo

CREATE OR REPLACE PACKAGE PCK_GERA_ITEM_SUP IS
 PROCEDURE INSERE_CONTABEIS(P_COD_EMPRESA IN CHAR); 
END; 
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Google Adsense [Bot] e 3 visitantes