Передача разделенных запятыми vlaues в DB2 for IN Clause - PullRequest
0 голосов
/ 05 августа 2020

У меня есть функция в DB2 с табличным значением, которая принимает AddressCode в качестве одного из параметров. AddressCode имеет тип Char (50).

Когда я передаю одно строковое значение из моего C# кода, например AddressCode = "ABE001". Он работает нормально, однако, когда я передаю два значения

, например,

string mAddressCode = "M0044";
string bAddressCode = "B0608";    
string formattedAddressCode = mAddressCode + bAddressCode;

, я получаю следующее исключение

$exception  {"ERROR [42601] [IBM][AS] SQL0104N  An unexpected token \"MUL0044\" was found following \"\".  Expected tokens may include:  \") ,\"."} IBM.Data.DB2.Core.DB2Exception

My where в функции Table Valued выглядит вот так

WHERE A . EMPSFT = 'Y' AND A . EMUKCD in ADDRESScODE

Я хотел бы узнать, как отформатировать строку, которая будет использоваться для предложения IN в DB2.

Работает следующее предложение where

WHERE A . EMPSFT = 'Y' AND A . EMUKCD in ('M0044','B0608')

Сценарий SQL передается в DB2 так:

  string formattedAddressCode =  string.Join(",", addressCode.Split(',').Select(x => $"'{x}'"));

  string sql = $"SELECT * FROM TABLE ( ABELIBLE.TVFBOEGETSHIPMENTS ( '{formattedStartDate}', '{formattedEndDate}' , '{formattedAddressCode}') )";

sql строка выглядит так

SELECT * FROM TABLE ( ABELIBLE.TVFBOEGETSHIPMENTS ( '2020-07-06', '2020-08-05' , ''M0044','B0608'') )

1 Ответ

0 голосов
/ 06 августа 2020

Надеюсь, это поможет, ребята. Мне удалось исправить это, изменив мое предложение where на

    WHERE
            A . EMPSFT = 'Y'
            AND A . EMUKCD IN (
                SELECT regexp_substr(ADDRESSCODE,
                '[^,]+',
                1,
                LEVEL)
            FROM
                SYSIBM.SYSDUMMY1
            CONNECT BY
                regexp_substr(ADDRESSCODE,
                '[^,]+',
                1,
                LEVEL) IS NOT NULL)

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

select regexp_substr('SMITH,ALLEN,WARD,JONES,sandhya, abe','[^,]+', 1, level) from SYSIBM.SYSDUMMY1
  connect by regexp_substr('SMITH,ALLEN,WARD,JONES, sandhya, abe', '[^,]+', 1, level) is not null;

Я получил это по следующей ссылке Oracle ссылка, но модифицирована в соответствии с DB2

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