इसे प्रदर्शित करने के लिए आपको अपने चयन से परिणाम पुनर्प्राप्त करने की आवश्यकता होगी। आप सिंथैक्स EXECUTE IMMEDIATE sql_query INTO var1, var2.. varn
का उपयोग करेंगे। . हालाँकि आपके मामले में संकलन समय पर स्तंभों की संख्या अज्ञात है।
आप इससे निपटने के कई तरीके हैं:
- आप आउटपुट के कॉलम पर DBMS_SQL और लूप का उपयोग कर सकते हैं।
- आप एक्सएमएल के सीएसवी जैसे पठनीय प्रारूप के साथ सभी परिणामों के साथ एक कॉलम बना सकते हैं
मैं 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