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

Показване на динамичен EXECUTE изход в рамките на pl/sql От sqlplus

ще трябва да извлечете резултата от вашия SELECT, за да го покажете. Ще използвате синтаксиса EXECUTE IMMEDIATE sql_query INTO var1, var2.. varn . Във вашия случай обаче броят на колоните е неизвестен по време на компилиране.

Има редица начини да се справите с това:

  1. можете да използвате DBMS_SQL и да извършите цикъл върху колоните на изхода.
  2. можете да създадете колона с всички резултати с четим формат като CSV на XML

Ще демонстрирам 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. java.sql.SQLException:Не може да се ангажира с автоматично ангажиране, зададено на oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4443)

  2. Трябва ли да създавам индекси на външни ключове на Oracle?

  3. Изберете N-ти ред от таблица в Oracle

  4. Oracle заявка за получаване на определена дата

  5. PL/SQL разработчик как да получи реда, който е направил вмъкването неуспешно?