Jump to content
tsilva141650

EXIBIR RETORNO DO CURSOR DE FORMA DE TABELA

Recommended Posts

Bom dia!

Estou precisando transformar o resultado do meu cursor em forma de tabela como se estivesse efetuando um select.

No exemplo abaixo criei uma procedure onde ira executar um execute immediate que ira variar, ou seja, não vou saber qual colunas serão necessárias.

O retorno desta função é um cursor onde consigo visualizar os resultados com o comando print.

Como poderia visualizar estes dados em forma de tabela?

 

create or replace PROCEDURE TESTE (ID NUMBER,RETORNO OUT SYS_REFCURSOR)
IS
SCRIPT CLOB;
BEGIN
    SCRIPT:= 'SELECT * FROM USER_TABLESPACES' ;
    EXECUTE IMMEDIATE SCRIPT;
    OPEN RETORNO FOR SCRIPT;
END;

 

 

var rc refcursor;
execute TESTE(2,:rc);
print rc ;

Share this post


Link to post
Share on other sites

USER_TABLESPACES  tem as tablesspaces do Sistema não colunas.

 

Creio não ter entendido seu problema.

 

 

Share this post


Link to post
Share on other sites

Utilizei  a tabela USER_TABLESPACES somente como exemplo. O que eu utilizo é um select montado dinamicamente com varias tabelas.

Eu preciso que os valores sejam retornados em forma de tabela, utilizando o comando print eu não consigo isso.

 

Ex: Quando efetuo um select e aperto F5 ele me retorna da mesma maneira que o print, mas quando efetuo o F9 ele retorna o select em forma de tabela.

 

O que eu preciso é que o retorno do cursor seja exibido igual quando aperto a tecla F9 em um select puro.

Share this post


Link to post
Share on other sites

Creio ter entendido mas não sei como fazer isto de forma dinâmica.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Edilson Chaves
      Ola amigos, uso curso a algum tempo, só que desta vez estou apanhando de algo que aparentemente e bem simples. Tenho certeza que estou esquecendo algum detalhe.
      To a 2 dias me debatendo com isto.
      Por isto estou pedindo ajuda.
       
      O que pretendo fazer e criar um novo registro que mostre a evoluçao do crecimento mensal projetando o ponto de equilibrio. Para isto eu preciso pegar a soma do mês anterior e acrescentar a soma do atual.
       
      Esta é a Procedure. Abaixo explico o quer nao esta funcionado.
       
      DROP PROCEDURE IF EXISTS sp_Monitorado;
      DELIMITER $$
          CREATE PROCEDURE sp_Monitorado()
          BEGIN
              DECLARE done INT DEFAULT FALSE;
              DECLARE vVlrMesAtuPrv, vVlrMesAntPrv, vVlrMesAtuRea, vVlrMesAntRea, vPrevisto, vRealizado numeric(10,2);
              DECLARE vAnoAtu, vMesAtu, vOrdem, vAno, vMes INT;
              DECLARE vGrupo, vSubGrupo, vPessoa, vPessoaAtu VARCHAR(100);
              DECLARE cDados CURSOR FOR SELECT Ordem, Grupo, SubGrupo, Pessoa, Ano, Mes, Previsto, Realizado FROM vwresultadomonitoramento;
              DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
              OPEN cDados;
              read_loop: LOOP
                  FETCH cDados INTO vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vRealizado;
                  IF done THEN
                     LEAVE read_loop;
                  END IF;
                  IF vOrdem <= 4 THEN
                      SET vVlrMesAtuPrv = vVlrMesAtuPrv + vPrevisto;
                      SET vVlrMesAtuRea = vVlrMesAtuRea + vRealizado;
                  INSERT INTO zzResultado VALUES (vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vVlrMesAtuPrv);
                  END IF;
                  IF vOrdem = 4 THEN
                      SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;
                      SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea;
                      INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea);
                      SET vVlrMesAtuPrv = 0;
                      SET vVlrMesAtuPrv = 0;
                  END IF;
              END LOOP read_loop;
              CLOSE cDados;
          END;
      $$ DELIMITER;
       
      Quando co cursor entra nesta condiçao abaixo ele deveria pegar o valor acumulado anterior e acrescentar as variaveis (vVlrMesAntPrv, vVlrMesAntRea). So que o valor se perde e fica tudo zerado.
      Alguém pode me dizer onde estou errando.
      Anexo tem um print do resultado que pretendo ter
       
       IF vOrdem = 4 THEN
                      SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;
                      SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea;
                      INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea);
                      SET vVlrMesAtuPrv = 0;
                      SET vVlrMesAtuPrv = 0;
      END IF;
       

    • By Jhol Walker
      Meus cursores estão duplicando quando seleciono alguma ferramenta de brush, por exemplo. 
      Também quando seleciono os mesmos, o brush fica todo zoado, fica de qualquer forma, menos circulo kkkk 
      Se alguém souber o que é e puder me ajudar ficarei grato! 
    • By Gustavo_RJ
      Bom dia, estou com uma dúvida que creio ser até simples mas não estou conseguindo a solução
       
      Estou rodando uma query em uma view que na maioria dos casos não resulta mesmo resultado e, eventualmente traz alguma coisa, são 4 colunas... mas preciso que quando a query não retorne nenhum resultado seja apresentada alguma mensagem, algo como "não foi encontrado nenhum registro"
       
      Eu imaginei cursor mas sinceramente só usei uma vez e tem tempo não sei se se aplica ou se teria outra maneira.
       
      Como posso fazer isso?
    • By Alexandre Garcia
      Olá,
      Estou tentando fazer uma rotina que receba um nome qualquer e "descubra" se se trata de tabela, índice ou constraint. Assuma que somente nomes existentes serão fornecidos. A rotina deve informar o nome do objeto e seu tipo descoberto. Se for uma tabela, também deve mostrar quantas linhas possui.
       
      Estou com a seguinte dificuldade. Não estou conseguindo mostrar quantas linhas a tabela possui. 
       
      CREATE OR REPLACE PROCEDURE Verifica (busca VARCHAR2) 
      IS
      cursor c_busca(busca in VARCHAR2)
        IS
         SELECT object_name, object_type
         FROM all_objects
         WHERE object_name LIKE busca||'%';
         
        v_temp_var1 all_objects.object_name%TYPE;
        v_temp_var2 all_objects.object_type%TYPE;
        
        in_table_count number;
        sql_stmt varchar2(300);
       
      BEGIN
        
        OPEN c_busca(busca);
          LOOP
            FETCH c_busca INTO v_temp_var1, v_temp_var2;
            EXIT WHEN c_busca%NOTFOUND;
                IF v_temp_var2 LIKE 'TABLE' THEN
                  dbms_output.put_line(v_temp_var1 ||' eh** uma:' || v_temp_var2);
                  sql_stmt := 'select count(*) from '|| v_temp_var1;
                execute immediate sql_stmt into in_table_count;
                  dbms_output.put_line(sql_stmt);
                ELSE
                  dbms_output.put_line(v_temp_var1 ||' eh** uma:' || v_temp_var1);
                end if;
          END LOOP;
        CLOSE c_busca;
        
      END ;
    • By s3c0
      Prezados,
       
      boa noite. Procurei na Internet toda e já tentei de tudo.
       
      Estou tentando alterar o cursor do mouse após marcar um checkbox, mas sempre está retornando erro.
       
      Segue code:
       
      <script> $(document).ready(function(e) { $("#agree").click(function(e) { if($(this).is(':checked')) //Retornar true ou false document.getElementById("sendcadastro").disabled = !this.checked; document.getElementById("sendcadastro").style.cursor = "normal"; else document.getElementById("sendcadastro").disabled = !this.checked; document.getElementById("sendcadastro").style.cursor = "no-drop"; }); }); </script> <input type="checkbox" name="agree" id="agree" value="1" /> <button type="submit" class="button" name="sendcadastro" id="sendcadastro" disabled >  
      Minha intenção seria:
       
      Se o visitante não clicar no checkbox confirmando sua leitura, ao passar o mouse no Botão fique com o Cursor "no-drop" e quando clicar no checkbox o cursor volte ao normal.
       
      A mensagem de Erro gerada é "Uncaught SyntaxError: Unexpected token else"
       
      Alguém poderia me dar uma luz onde estou errando?
       
      Agradeço a atenção de Todos!
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.