【发布时间】:2019-09-08 14:47:19
【问题描述】:
我正在尝试从 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 语句中不起作用?
【问题讨论】:
-
在您的字符串中没有单引号。你查询返回一个字符串
6218, 5577而不是一个ID列表。你应该解析你的字符串 -
它是一个字符串,我们从应用程序传递给参数到 oracle sql 开发程序,为了理解我在选择查询
i.e. '6218, 5577'中写了示例字符串。 -
能否更改您的应用程序以传递数字集合,而不是单个字符串值——它可能是从列表中生成的?