Oracle динамический запрос - PullRequest
       0

Oracle динамический запрос

0 голосов
/ 21 сентября 2011

У меня простой запрос, vanilla select, к которому я хочу отфильтровать значения, предоставленные пользователем.

SELECT A,B,C,D,E FROM TAB
WHERE ....

Здесь WHERE не зафиксировано, т. Е. Пользователь может вводить значения для C, поэтому следует фильтровать только C, или D или E и так далее.Проблема связана с тем, что пользователь говорит фильтрующему callerID от 1 до 10 и т. Д., Но столбец базы данных имеет другое имя.Таким образом, чтобы сформировать рабочий запрос, я должен сопоставить CallerID с columnName.Как это было бы в процедуре, я думал о передаче CSV userInputColumnNames, CSV из dbColumns и фильтра начала и начала.Затем кропотливо извлеките значения и сопоставьте правильное имя столбца БД и сформируйте запрос.Это работает, но, тем не менее, это очень громоздко и не чисто.Может ли быть лучший способ сделать это?

1 Ответ

1 голос
/ 21 сентября 2011

Меняются ли имена столбцов в таблице?Или столбцы в таблице добавлены / удалены?Если нет, вы можете сгенерировать число для сопоставления с каждым столбцом в таблице, например:

SQL> SELECT column_name, ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY column_name) "COLUMN_NUMBER"
  2  FROM dba_tab_columns
  3  WHERE table_name='DBA_USERS'
  4  
baim> /

COLUMN_NAME                    COLUMN_NUMBER
------------------------------ -------------
ACCOUNT_STATUS                             1
CREATED                                    2
DEFAULT_TABLESPACE                         3
EXPIRY_DATE                                4
EXTERNAL_NAME                              5
INITIAL_RSRC_CONSUMER_GROUP                6
LOCK_DATE                                  7
PASSWORD                                   8
PROFILE                                    9
TEMPORARY_TABLESPACE                      10
USERNAME                                  11
USER_ID                                   12

12 rows selected.

Затем, когда пользователь выбирает столбец 9, вы знаете, что он сопоставляется со столбцом «ПРОФИЛЬ».1005 * Если имена столбцов могут измениться, или если столбцы добавляются / удаляются динамически, тогда это не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...