Piecemeal Динамический SQL?Как взять критерии поиска в виде строк значений столбцов и сделать их кодом предложения? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь создать функцию или пример кода, который использует данные строки столбца в качестве логики предиката для моего предложения where.Примеры строк в столбцах установленной таблицы:

'1=1', '1=2', 'DEPT_DESC = Sales', 'RPM_CODE IN('MS-123','MS-124','MS-126')' 

Я исследовал способы построения динамического SQL и вставки данных этого столбца в часть большего выполнения Dynamic SQL, но я идуКороче говоря.Это кажется очень простой вещью, которую мои коллеги смогли сделать в Oracle, и я сталкиваюсь с досадным препятствием на пути к концу SQL.Любая помощь будет принята с благодарностью.

Вот мой пример кода: 'SELECT * FROM ALL_TRANS WHERE ____' (Пустое место, где мне нужно вставить строку в предложение.)

1 Ответ

0 голосов
/ 21 января 2019

По сути, создание динамического SQL, в котором имена COLUMN могут меняться, включает в себя изменение SQL_Model с одним или несколькими ключевыми словами, что приводит к SQL_toExec, который присваивается экземпляру.

The SQL_Model that is easily extensible might be
   SQL_Model = 'SELECT * FROM ALL_TRANS WHEREWXYZ'
Then move SQL_toExec = SQL_Model
And thru  SQL_toExec = Replace(SQL_toExec, 'WXYZ', ', DEPT_DESC = SalesWXYZ') 
to get   'SELECT * FROM ALL_TRANS WHERE, DEPT_DESC = SalesWXYZ'
And thru  SQL_toExec = Replace(SQL_toExec, 'WXYZ', ', RPM_CODE IN(''MS-123'',''MS-124'')WXYZ') 
 to get  'SELECT * FROM ALL_TRANS WHERE, DEPT_DESC = Sales, RPM_CODE IN(''MS-123'',''MS-124'')WXYZ'

The SQL_toExec keeps getting longer, with more columns added
And then two final replaces to clean things up
    SQL_toExec = Replace(SQL_toExec, 'WHERE,', 'WHERE ')   'remove the initial comma
    SQL_toExec = Replace(SQL_toExec, 'WXYZ', '')           ' remove the trailing WXYZ

И выготов к работе.

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