Como usar variável tipo Bind em select?

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
EnzoN
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Sex, 18 Nov 2016 9:21 am

Olá pessoal, estou com dificuldades em um procedure.
Preciso fazer com que esses parâmetros sejam do tipo BIND, entretanto não estou conseguindo fazer.
Seria apenas apontar o ":" aos parâmetros?
Se alguém puder ajudar.....

Selecionar tudo

CREATE OR REPLACE PROCEDURE spCalculaValores(P_EMPRESA IN CHAR
                                           ,P_AGENCIA IN CHAR
                                           ,P_CONTRATO IN CHAR
                                           ,P_PARCELA IN NUMBER
                                           ,P_SIMULACAO IN CHAR
                                           ,P_RETURN OUT SYS_REFCURSOR)
IS

BEGIN

  OPEN P_RETURN
    FOR SELECT Distinct P.Situacao, P.Situacao, P.UltimaSequencia, P.Vcto, 
             P.Parcela, P.Principal, P.Receita, P.Renda, P.RendaRevertida, P.Correcao, 
             P.JurosAtraso, P.ComPermanencia, P.RendaCreAtraso, P.RendaCreLiquidacao, P.saldo, P.SaldoRenda, 
             P.DataSaldo, P.Moeda, P.Aniversario, P.TipoMoeda, P.PagaJuros, P.PagaCorrecao, P.Cessao, P.TipoCredito, 
             P.Pmt, P.Banco, P.CodigoBancosCobranca, P.BaixaRetida, C.Conveniada, C.ConveniadaOrgao, 
             C.TaxaMes,
             C.Irr,
             C.DataPrejuizo,
             C.tarifaantecipacao
      FROM   Parcelas P INNER JOIN ContratosCdc C ON (P.Empresa = C.Empresa
                          AND P.Agencia = C.Agencia
                          AND P.Contrato = C.Contrato)
    WHERE P.Empresa = P_EMPRESA
          AND P.Agencia = P_AGENCIA
          AND P.Contrato = P_CONTRATO    
          AND P.Parcela = P_PARCELA    
    ORDER BY P.Parcela;   

END spCalculaValores;
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Brother,não sei qual o propósito do qual quer utilizar sql dinâmico usando varíáveis bind ,de toda sorte,segue um exemplo de como se fazer :

Selecionar tudo

-- Subprogram that dynamic PL/SQL block invokes:
CREATE OR REPLACE PROCEDURE create_dept (
  deptid IN OUT NUMBER,
  dname  IN     VARCHAR2,
  mgrid  IN     NUMBER,
  locid  IN     NUMBER
) AS
BEGIN
  deptid := departments_seq.NEXTVAL;

  INSERT INTO departments (
    department_id,
    department_name,
    manager_id,
    location_id
  )
  VALUES (deptid, dname, mgrid, locid);
END;
/
DECLARE
  plsql_block VARCHAR2(500);
  new_deptid  NUMBER(4);
  new_dname   VARCHAR2(30) := 'Advertising';
  new_mgrid   NUMBER(6)    := 200;
  new_locid   NUMBER(4)    := 1700;
BEGIN
 -- Dynamic PL/SQL block invokes subprogram:
  plsql_block := 'BEGIN create_dept(:a, :b, :c, :d); END;';

 /* Specify bind variables in USING clause.
    Specify mode for first parameter.
    Modes of other parameters are correct by default. */

EXECUTE IMMEDIATE plsql_block
    USING IN OUT new_deptid, new_dname, new_mgrid, new_locid;
END;
/



Selecionar tudo

BEGIN
 -- Dynamic PL/SQL block invokes subprogram:
  plsql_block := 'BEGIN create_dept(:a, :b, :c, :d); END;';

 /* Specify bind variables in USING clause.
    Specify mode for first parameter.
    Modes of other parameters are correct by default. */

EXECUTE IMMEDIATE plsql_block

Obs: é importante prestar atenção nas chamadas em negrito,estamos tratando de blocos.
Boa sorte.
Responder
  • Informação