Pular para o conteúdo
Visualizando 10 posts - 1 até 10 (de 10 do total)
  • Autor
    Posts
  • #85929
    airoosp
    Participante

      Boa tarde,

      Alguém sabe como fazer para que ao passar um parâmetro para um cursor o conteúdo desta variável seja utilizada na claúsula Where.

      Por exemplo

      Cursor listagem (pEstado in varchar2) is

      select *
      from cad_estados
      pEstado
      ;

      Onde pEstado=’where sigla = ”SP” ‘

      O cursor retorna os dados mas não respeita o filtro, tentei utilizar o comando execute immediate dentro do cursor mas não funcionou.
      Se alguém tiver alguma idéia agradeço.

      Obrigado.

      Airton

      #85931
      Marcio68Almeida
      Participante

        como você está passando a variável ???
        como você fez a clausula WHERE da sua consulta ???

        #85934
        Avatar photoLeonardo Litz
        Participante

          Faça assim:

          Cursor listagem (pEstado in varchar2) is

          select *
          from cad_estados
          where sigla = pEstado
          ;

          #85935
          Manoel872
          Participante

            DECLARE
            Cursor listagem (pEstado in varchar2) is

            select *
            from cad_estados
            where sigla = pEstado;
            BEGIN
            OPEN listagem(‘SP’);
            ….
            END;

            #85938
            airoosp
            Participante

              Fiz um teste com os exemplos mas não funciona conforme os parâmetros passados na claúsula where.
              O conteúdo do parâmetro será composto pelas opções que o usuário selecionar em tela através da seleção de vários checkbox.

              Por exemplo:

              Selecione de quais montadoras deseja ver informações.

              GM
              Fiat
              Volvo
              Kia
              Ford

              Selecione quais tipos de motorização.

              1.0
              1.8
              2.4
              3.0

              Selecione quais tipos de combustível.

              Gás
              Gasolina
              Álcool
              Flex
              Diesel

              Mudando de tabela para cad_veiculos, o conteúdo do parâmetro seria:

              pConsulta=’where combustivel in (‘Gás’,’Flex’,’Diesel’) and motor in (‘1.0′,’3.0’) and montadora in (‘GM’,’FIAT’,’FORD’)’

              Obrigado.

              Airton

              #85943
              Ishii
              Participante

                Olá,

                Acho que você vai ter que usar o DBMS_SQL.

                Seria algo assim:


                Declare
                cCursor number;
                vStmt varchar2(2000);
                vCond varchar2(2000);
                vNumCha varchar2(60);
                vResult varchar2(2000); -- se o num_chassis for mesmo varchar2....

                vAux number;

                begin

                cCursor:= dbms_sql.open_cursor;

                vStmt: = 'select num_chassis from cad_veiculos '|| vCond;

                dbms_sql.parse (cCursor, vStmt, dbms_sql.v7); -- resolve a query

                dbms_sql.define_column( cCursor, 1, vNumCha);

                vAux:= dbms_sql.execute ( cCursor);

                while dbms_sql.fetch_rows (cCursor) > 0 then

                dbms_sql.column_value (cCursor, 1, vNumCha);

                vResult:= vResult ||vNumCha;

                end loop;

                dbms_sql.close_cursor( cCursor);

                end;

                E você usa o vResult para colher ou alimentar numa tabela ou para capturar mesmo os resultados..

                []s Ishii

                #85944
                airoosp
                Participante

                  Obrigado Ishii vou fazer um teste com o exemplo que você passou.

                  #85948
                  airoosp
                  Participante

                    Ishii,

                    O exemplo que você passou funciona, tive que fazer algumas modificações na chamada do cursor mas funcionou, detalhe na instrução dbms_sql.define_column( cCursor, 1, vNumCha) faltou acrescentar no final o tamanho da coluna.

                    dbms_sql.define_column( cCursor, 1, vNumCha,20);

                    Obrigado.

                    Airton

                    #85952
                    Ishii
                    Participante

                      javascript:emoticon(‘:D’)

                      []s Ishii

                      #85957
                      airoosp
                      Participante

                        Ishii,

                        Referente a resposta que enviei achei estranho ter que colocar o tamanho do campo, pesquisei mais e descobri que se o tipo da variável e/ou campo for varchar, char e raw é necessário definir o tamanho do campo no comando dbms_sql.define_column.

                        Fica essa informação para o pessoal do GPO.

                        Obrigado.

                        Airton

                      Visualizando 10 posts - 1 até 10 (de 10 do total)
                      • Você deve fazer login para responder a este tópico.