Pular para o conteúdo

Como obter o nome das colunas de uma variável SYS_REFCURSOR – Exemplo prático

Obter o nome das colunas de uma variável SYS_REFCURSOR

Olá Sergio !

Eu vi o seu post no blog mostrando em como se pega as colunas de um SELECT através do pacote DBMS_SQL. Como eu poderia fazer isso recebendo um REFCURSOR ? Fiz várias tentativas e não tive sucesso.

Obrigado de antemão

Daniel R.P. Soares


Daniel,

   como combinado, eu prometi que iria responder isso com um pequeno exemplo prático através do meu blog. Então vamos lá !

Abaixo um exemplo de como você poderá fazer isso:

   DECLARE
      vCount      NUMBER  DEFAULT 0;
      cCursor     INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
      vDescr      DBMS_SQL.DESC_TAB;
      vRefCursor  SYS_REFCURSOR; 

   BEGIN
      -- Guardar o resultado em uma variável REFCURSOR

      OPEN vRefCursor
      FOR
      SELECT * FROM ALL_TABLES;

      -- Abrir o Cursor

      cCursor := DBMS_SQL.TO_CURSOR_NUMBER(vRefCursor);

      -- Retornar as colunas em um Array

      DBMS_SQL.DESCRIBE_COLUMNS
         (
          cCursor
         ,vCount
         ,vDescr
         );  

      -- Ler o Array e exibir os campos

      FOR i IN 1..vCount LOOP
         DBMS_OUTPUT.PUT_LINE
            (
             'COLUMN: '|| vDescr(i).col_name
            );

      END LOOP;

      -- Feche sempre o seu cursor ! 🙂

      DBMS_SQL.CLOSE_CURSOR
         (
          cCursor
         );

   END;

Observe que utilizo o DBMS_SQL.TO_CURSOR_NUMBER para buscar o ID do cursor. Com essa informação em mãos, consigo buscar o resto das informações.

Espero ter ajudado !

Abraço

Sergio Willians

Sergio Willians

Sergio Willians é o fundador do GPO (Grupo de Profissionais Oracle) e possui quase 30 anos de experiência em tecnologias Oracle, sendo especialista em desenvolvimento Forms/Reports, PL/SQL e EBS (E-Business Suite) nos módulos Receivables, Payables e General Ledger. Atualmente trabalha na Scania Latin America, onde se dedica à área de integração de dados com Confluent Kafka. Sua paixão é compartilhar conhecimento com a comunidade Oracle, contribuindo para o crescimento e a excelência da plataforma.

Comentário(s) da Comunidade

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress