sql >> Database teknologi >  >> RDS >> Oracle

Hvordan får man adgang til strukturen og får kolonnelisten, datatyper af refcursor?

Du kan konvertere ref-markøren til en DBMS_SQL markør ved hjælp af DBMS_SQL.TO_CURSOR_NUMBER fungere. Derefter, med markørnummeret, kan du inspicere manipulere det via DBMS_SQL . Dette inkluderer at kunne beskrive dets kolonner, som vist i eksemplet nedenfor:

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;

Output

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. Forskellen mellem multi-sætning tabel-værdisatte funktioner og inline tabel-værdi-funktioner i SQL Server

  2. Sådan fungerer TO_DAYS() i MariaDB

  3. Hvordan skriver man en REST API?

  4. XML-tabel med Oracle 11g