Вам необходимо использовать динамический запрос c следующим образом:
SQL> var lv_cur refcursor;
SQL>
SQL> DECLARE
2 LV_COLS VARCHAR2(32000);
3 LV_TABLE_NAME VARCHAR2(128) := 'STUDENTS';
4 LV_SCHEMA_NAME VARCHAR2(128) := 'TEJASH';
5 LV_COLUMN_STARTWITH VARCHAR2(10) := 'S';
6 --LV_CUR SYS_REFCURSOR;
7 BEGIN
8 SELECT
9 LISTAGG(COLUMN_NAME, ',') WITHIN GROUP(
10 ORDER BY
11 COLUMN_ID
12 )
13 INTO LV_COLS
14 FROM
15 ALL_TAB_COLUMNS
16 WHERE
17 TABLE_NAME = LV_TABLE_NAME
18 AND COLUMN_NAME LIKE LV_COLUMN_STARTWITH || '%'
19 AND OWNER = LV_SCHEMA_NAME;
20
21 IF LV_COLS IS NOT NULL THEN
22 OPEN :LV_CUR FOR 'SELECT '
23 || LV_COLS
24 || ' FROM '
25 || LV_SCHEMA_NAME
26 || '.'
27 || LV_TABLE_NAME;
28
29 ELSE
30 OPEN :LV_CUR FOR 'SELECT ''NO DATA'' FROM DUAL';
31 END IF;
32 END;
33 /
PL/SQL procedure successfully completed.
SQL> PRINT LV_cUR;
S_ID S_NAME S_ADDRESS S_LEVEL S_RECORDS_POINTS S_MAJOR S_CLASS
---------- ---------- ---------- ---------- ---------------- ---------- ----------
1 TEJASH A2 1 15.972 1 1
SQL>
Я использовал этот блок для извлечения данных столбца с S в качестве начального символа в таблице STUDENTS
( TEJASH
схема). Если столбец, удовлетворяющий условию, отсутствует, будет отображаться NO DATA
.