【发布时间】:2016-10-03 23:57:36
【问题描述】:
场景:
我有两个表: Vendors 表提供唯一标识符;并且 Order 表的行包含一列,该列具有我们想要剥离的唯一标识符。例如:唯一 ID:12345 并且内容有“Order for 12345”...期望的结果,字面意思是:“Order for XXXXX”
我需要一个 select 语句来显示表 2 中的哪些记录实际上具有唯一标识符和一个 update 语句来进行剥离。
架构
Table Vendors
ID varchar2(9)
NAME varchar(50)
Table Orders
OrderNumber varchar2(10)
Dscr varchar(250) <----order description
示例:
Vendors
12345 Joe
23456 Jenni
Orders
A123456 | Order for 12345 <---notice this number is the ID of the Vendor
B039483 | Order for 23456
期望的结果:
Orders
A123456 | Order for XXXXX
B039483 | Order for XXXXX
我目前所拥有的:
DECLARE
TYPE dscr_type IS TABLE OF VARCHAR2(250);
chk_dscr_coll dscr_type;
BEGIN
-- gather a list of IDs to use
FOR someone IN (
SELECT unique(ID) FROM vendors WHERE TIN IS NOT NULL
)
-- loop through the Orders table
-- try to match the ID agains each record via regular expression
LOOP
SELECT dscr BULK COLLECT INTO dscr_coll
FROM orders
WHERE REGEXP_LIKE(dscr, '.*'||someone.ID||'.*');
DBMS_OUTPUT.PUT_LINE('>>>>>>>>>>>>>>'||dscr_coll(1));
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('');
END;
/
更新
我按照 Kordirko 提供的线索提出了这个 MERGE 声明。
MERGE INTO AFMOWN.ABS_DOC_ACTG target
USING (
SELECT v.TIN
FROM AFMOWN.R_VEND_CUST v
where v.TIN is not null
) vendor
ON (chk_dscr LIKE '%' || vendor.TIN || '%')
WHEN MATCHED THEN UPDATE
SET chk_dscr = REGEXP_REPLACE( chk_dscr, vendor.TIN, '999999999' );
不幸的是,我收到了这个错误: UPDATE SET 的 LHS 包含 ON 子句中引用的列
有人可以帮忙吗?
【问题讨论】:
-
我不知道你想要什么。向我们展示数据库架构、示例数据和预期结果。你在那个存储过程上做了很多没有意义的事情。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
标签: sql oracle select sql-update