Montando meu Select através de condições

Oracle

24/09/2010

Estou montando meu select através de condições armazeno meu select em uma variavel varchar, E ABRO O CURSOR NO FINAL.

--------------------------------------------------------------------------------------
PROCEDURE MINHA_PROC(P_DATA IN TNOTA.DATA%TYPE,
                                           P_CURSOR OUT TYPES.CURSORTYPE)
AS
 V_COMMAND VARCHAR(1000);
BEGIN
     V_COMMAND :=                          '  SELECT C.RAZAOSOCIAL              ';
     V_COMMAND := V_COMMAND || '               C.CNPJ                            ';
     V_COMMAND := V_COMMAND || '       FROM TCLIENTES  C,               ';
     V_COMMAND := V_COMMAND || '                 TNOTA N                        ';
     V_COMMAND := V_COMMAND || '          WHERE C.CNPJ = N.CNPJ     ';

    IF  (P_DATA IS NOT NULL) THEN
          V_COMMAND := V_COMMAND || '      AND N.DATA = P_DATA        ';
    END IF;

   OPEN P_CURSOR FOR V_COMMAND;
END;
----------------------------------------------------------------------------------

Minha dúvida é tem algum modo que posso montar meu select como condiçoes seguindo o exemplo acima sem guardar em uma variavel?????

Diego Lirio

Diego Lirio

Curtidas 0

Respostas

Deivison Melo

Deivison Melo

24/09/2010

Diego,   Você deverá criar um cursor dinâmico.   PS. Aqui no portal da DevMedia você encontrará bons exemplos!!   Qualquer coisa estou à disposição!!   Emanoel Deivison Recife - PE    
GOSTEI 0
Deivison Melo

Deivison Melo

24/09/2010

Diego,   Segue um exemplo simples:       /*Criando procedure - (inicio)*/
  create or replace procedure exec_sql( script_sql varchar2 ) is
    v_cursor  integer;
    v_retorno integer;
  begin
    v_cursor := dbms_sql.open_cursor;
    dbms_sql.parse( v_cursor, script_sql, 1 );
    v_retorno := dbms_sql.execute( v_cursor );
    dbms_sql.close_cursor( v_cursor );
  exception when others then
     dbms_sql.close_cursor( v_cursor );
     raise_application_error( -20050 , 'erro: '|| sqlerrm);
  end;
  /*Criando procedure - (fim)*/         /*exemplo de uso - (inicio)
    Descrição: nesse exemplo que fiz pra vc eu seto a Linguagem da Máquina para Americana
  */
  Exec_Sql('alter session set NLS_DATE_LANGUAGE='||CHR(39)||'AMERICAN'||CHR(39)||' ');
  /*exemplo de uso - (inicio)*/     Qualquer coisa estou à disposição!!!   Atenciosamente,   Emanoel Deivison Recife - PE
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

24/09/2010

GOSTEI 0
Diego Lirio

Diego Lirio

24/09/2010

VALEU ERILEY E EMANUEL POR RESPONDEREM.

MAS AINDA CONTINUO NA DUVIDA....

ANDEI VENDO O TÓPICO NA DEVMEDIA E É BEM PARECIDO COM O EXEMPLO QUE DEI....
QDO USO UMA VARIAVEL DO TIPO CURSOR E ABRE UM SELECT
>>>> OPEN P_CURSOR FOR SELECT * FROM TCLIENTE;
NÃO TENHO DUVIDAS.
MAS QDO PRECISO IR MONTANDO MEU SCRIPT COMO O EXEMPLO QUE DEI. SE TENHO MODIFICAÇÕES OU DAR MANUTENÇÃO AÍ QUE COMEÇA A FICAR ESTREITO.
DEVE HAVER ALGO PARA MONTAR MINHAS CONDIÇOES.....
GOSTEI 0
Deivison Melo

Deivison Melo

24/09/2010

Finalizando o tópico, caso ainda haja dúvidas, por favor, sinalizar para te ajudarmos da melhor forma possível.
GOSTEI 0
POSTAR