Избегайте одинарных кавычек из строки через запятую в Oracle - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь экранировать одинарные кавычки из строки через запятую в Oracle SQL Developer, ниже мой Select запрос:

SELECT (CASE WHEN PS.SUPPLIER_NO IS NULL THEN 'FALSE' ELSE 'TRUE' END) AS "Check"
      ,dm."branch_id", dm."SUPPLIER_NO", dm."supplier_name", dm."date_created"
      ,dm."vendor_no", dm."ORDERING_ADDRESS_1", dm."ORDERING_ADDRESS_2"
      ,dm."ORDERING_CITY", dm."ORDERING_STATE_COD", dm."ORDERING_ZIP"
      ,dm."country_code", dm."fax_area_code", dm."fax_no", dm."fax_extension"
FROM datamart.udm_supplier_dim@teradata.wesco.com dm
LEFT JOIN PROJECT_SUPPLIERS PS ON PS.SUPPLIER_NO = dm."SUPPLIER_NO"
 AND PS.BRANCH_ID = dm."branch_id"
 AND PS.PROJECT_ID = 'e82a654af6c64e8297576b88b5eff138'
WHERE dm."branch_id" IN (REPLACE('6218, 5577','''',''''''));

Я пытался заменить / экранировать одинарные кавычки из Where INпредложение, но выдает ошибку неверного номера.

ORA-01722: неверный номер

Когда я пытаюсь выбрать ту же строку, используя замену из другого оператора выбора, он работает.

select REPLACE('6218, 5577','''','''''') from dual;

приведенный выше запрос работает, как и ожидалось, и дает o / p как '6218, 5577'.

Может кто-нибудь посоветовать, почему он не работает в моем основном операторе Select?

1 Ответ

2 голосов
/ 18 апреля 2019

'6218, 5577' это строка, а не список значений.Так что если вы делаете select REPLACE('6218, 5577','''','''''') from dual;, вы пытаетесь заменить одну цитату в вашей строке.так как он не существует в вашей строке, ничего не будет заменено.

результат, который вы выбрали, остается той же самой строкой, а не списком, как вы ожидаете.

, вам следует разделить запятуюстрока в строках.

вот один из способов сделать это

with tab as (
  SELECT trim(regexp_substr('6218, 5577', '[^,]+', 1, LEVEL)) str
   FROM dual
   CONNECT BY instr('6218, 5577', ',', 1, LEVEL - 1) > 0
) 

, чем вы можете использовать его на выбранном

with tab as (
  SELECT trim(regexp_substr('6218, 5577', '[^,]+', 1, LEVEL)) str
   FROM dual
   CONNECT BY instr('6218, 5577', ',', 1, LEVEL - 1) > 0
) 
select ...
  from ...
  WHERE dm."branch_id" IN (select str from tab ); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...