Как применить подстановочный знак к списку столбцов в SQL - PullRequest
0 голосов
/ 10 апреля 2020

Я хотел бы знать, как использовать подстановочный знак в select

Например, я хотел бы извлечь columns, который содержит, например, test.

Как я могу извлечь это?

Select 
From T2

Мой желаемый результат похож на это

test1 test2 test3
1     2     3
4     5     6

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Вам необходимо использовать динамический запрос 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.

0 голосов
/ 10 апреля 2020

Вы можете сделать что-то вроде этого

SQL Сервер

select * 
from information_schema.columns 
where column_name like 'test%' 
order by 
    table_name

Oracle

select 
     table_name, 
     column_name 
from all_tab_columns 
where column_name like 'test%'
and owner in ('your_schema_name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...