Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да получите достъп до структурата и да получите списък с колони, типове данни на рекурсора?

Можете да конвертирате ref курсора в DBMS_SQL курсора, използвайки DBMS_SQL.TO_CURSOR_NUMBER функция. След това, като имате номера на курсора, можете да проверите как да го манипулирате чрез DBMS_SQL . Това включва възможността да се опишат неговите колони, както е показано в примера по-долу:

DECLARE
  l_rc              SYS_REFCURSOR;

  l_cursor_number   INTEGER;
  l_col_cnt         INTEGER;
  l_desc_tab        DBMS_SQL.desc_tab;
  l_col_num         INTEGER;
BEGIN
  OPEN l_rc FOR 'SELECT object_name, object_type, last_ddl_time FROM dba_objects where rownum <= 10';

  l_cursor_number   := DBMS_SQL.to_cursor_number (l_rc);

  DBMS_SQL.describe_columns (l_cursor_number, l_col_cnt, l_desc_tab);

  l_col_num         := l_desc_tab.FIRST;

  IF (l_col_num IS NOT NULL) THEN
    LOOP
      DBMS_OUTPUT.put_line ('Column #' || l_col_num);
      DBMS_OUTPUT.put_line ('...name: ' || l_desc_tab (l_col_num).col_name);
      DBMS_OUTPUT.put_line ('...type: ' || l_desc_tab (l_col_num).col_type);
      DBMS_OUTPUT.put_line ('...maxlen: ' || l_desc_tab (l_col_num).col_max_len);
      -- ... other fields available in l_desc_tab(l_col_num) too.
      l_col_num   := l_desc_tab.NEXT (l_col_num);
      EXIT WHEN (l_col_num IS NULL);
    END LOOP;
  END IF;

  DBMS_SQL.close_cursor (l_cursor_number);
END;

Изход

Column #1
...name: OBJECT_NAME
...type: 1
...maxlen: 128
Column #2
...name: OBJECT_TYPE
...type: 1
...maxlen: 23
Column #3
...name: LAST_DDL_TIME
...type: 12
...maxlen: 7


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:има ли значение редът на колоните в индекс?

  2. Как мога да използвам регулярен израз за разделяне на низ, като използвам низ като разделител?

  3. Как да създадете потребител в Oracle 11g и да предоставите разрешения

  4. Как да тествате съхранена процедура на Oracle с тип връщане на RefCursor?

  5. Как да стартирате съхранена процедура в oracle sql developer?