【发布时间】:2019-05-18 04:56:34
【问题描述】:
我有旧的 Oracle 10g 数据库,我需要编写更新。我编写了更好的 TSQL,但我的 PL/SQL 很糟糕,我需要一些帮助。
我有 3 个表:源表、链接表和目标表。因为表中的数据很糟糕,所以我需要使用 REPLACE/TRIM 函数和 CASE 才能使联接起作用。
但是,这会导致问题,我无法弄清楚在使用 CASE 后如何编写更新。我尝试使用 MERGE 和 UPDATE 但没有运气。
我写了这个 SELECT 语句,我应该可以正常工作:
SELECT
C.NAME,
-- C.FLAG -- How I can update flag here?
FROM TEST.C_TABLE C
INNER JOIN
(
SELECT
CASE
WHEN LENGTH(TRIM(REPLACE(REPLACE(REPLACE(ID, '-', ''), '&&', ''), '"', ''))) = 15
THEN TRIM(REPLACE(REPLACE(REPLACE(ID, '-', ''), '&&', ''), '"', '')) -- TRUE, because some rows causes problems...
ELSE TRIM(REPLACE(REPLACE(REPLACE(SUBSTR(ID ,-9, 9), '-', ''), '&&', ''), '"', '')) -- FALSE
END ID,
NAME
FROM TEST.B_TABLE
) B
ON B.NAME = C.NAME
INNER JOIN A_TABLE A ON REPLACE(A.ID, '&&', '') = B.ID
如何将这个 SELECT 语句“转换”为 UPDATE 或 MERGE?
谢谢!
【问题讨论】:
-
你为什么不用英语表达更新需要完成什么。根据您的选择查询,我不确定我是否了解更新要求。
-
从您的表中添加示例数据以及执行更新后的预期结果。请edit您的问题并仅以文本格式添加,没有图像。
-
请考虑不同的 DB 的主要区别在于 DDL,而不是 DML,而且
SELECT、INSERT、UPDATE和DELETE通常非常相似。尝试像在 TSQL 中那样编写它,并观察是否有任何需要调整的部分。
标签: oracle join plsql switch-statement oracle10g