sql >> Database >  >> RDS >> Oracle

Dynamisch EXECUTE-uitvoer weergeven binnen pl/sql van sqlplus

u moet het resultaat uit uw SELECT halen om het weer te geven. Je zou de synthax gebruiken EXECUTE IMMEDIATE sql_query INTO var1, var2.. varn . In uw geval is het aantal kolommen echter onbekend tijdens het compileren.

Er zijn een aantal manieren om hiermee om te gaan:

  1. je zou DBMS_SQL kunnen gebruiken en op de kolommen van de uitvoer kunnen lussen.
  2. je zou een kolom kunnen maken met alle resultaten in een leesbaar formaat zoals CSV of XML

Ik zal demo 1:

SQL> DEFINE scheme_name=SYS
SQL> DEFINE table_name=ALL_OBJECTS
SQL> DECLARE
  2     sql_query VARCHAR2(32767);
  3     l_cursor  NUMBER := dbms_sql.open_cursor;
  4     l_dummy NUMBER;
  5     l_columns dbms_sql.desc_tab;
  6     l_value NUMBER;
  7  BEGIN
  8     sql_query := 'select ';
  9     FOR column_rec IN (SELECT column_name
 10                          FROM ALL_TAB_COLS
 11                         WHERE owner = '&scheme_name'
 12                           AND table_name = '&table_name'
 13                           AND data_type = 'NUMBER') LOOP
 14        sql_query := sql_query || 'SUM(' || column_rec.column_name
 15                     || ') "SUM(' || column_rec.column_name || ')", ';
 16     END LOOP;
 17     sql_query := substr(sql_query, 0, length(sql_query) - 2)
 18                  || ' from &scheme_name' || '.&table_name';
 19     dbms_sql.parse(l_cursor, sql_query, dbms_sql.NATIVE);
 20     dbms_sql.describe_columns(l_cursor, l_dummy, l_columns);
 21     FOR i IN 1..l_columns.count LOOP
 22        dbms_sql.define_column(l_cursor, i, l_columns(i).col_type);
 23     END LOOP;
 24     l_dummy := dbms_sql.execute_and_fetch(l_cursor, TRUE);
 25     FOR i IN 1..l_columns.count LOOP
 26        dbms_sql.column_value(l_cursor, i, l_value);
 27        dbms_output.put_line(l_columns(i).col_name ||' = '||l_value);
 28     END LOOP;
 29  END;
 30  /

SUM(DATA_OBJECT_ID) = 260692975
SUM(OBJECT_ID) = 15242783244



  1. Hoe kan ik meerdere voorwaarden invoeren in de LIKE-operator?

  2. Groeperen op alias (Oracle)

  3. Hoe bereken ik de grootte van tabellen in Oracle

  4. Hoe zich te ontdoen van MySQL-fout 'Voorbereide instructie moet opnieuw worden voorbereid'