Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tampilkan Output Dynamic EXECUTE Dalam pl/sql Dari sqlplus

Anda harus mengambil hasil dari SELECT Anda untuk menampilkannya. Anda akan menggunakan sintaks EXECUTE IMMEDIATE sql_query INTO var1, var2.. varn . Namun dalam kasus Anda, jumlah kolom tidak diketahui pada waktu kompilasi.

Ada beberapa cara untuk mengatasi hal ini:

  1. Anda dapat menggunakan DBMS_SQL dan mengulang kolom output.
  2. Anda dapat membuat kolom dengan semua hasil dengan format yang dapat dibaca seperti CSV dari XML

Saya akan mendemonstrasikan 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menggunakan fungsi Analitik di oracle (Over Partition by Keyword)

  2. Jalankan Fungsi oracle yang mengembalikan kursor referensi di C #

  3. ORA-00910:panjang yang ditentukan terlalu panjang untuk tipe datanya

  4. Jalankan Prosedur Tersimpan SQL Server melalui Tautan Database dari Oracle

  5. Hapus semua karakter setelah karakter tertentu di PL/SQL