create table items(item_pk integer, pgid integer, prod_id integer, PRIMARY KEY(item_pk));
create table products(prod_id integer, version integer, pgid integer, flag char(1), PRIMARY KEY(prod_id));
insert into items(item_pk, pgid) values (1, 21);
insert into items(item_pk, pgid) values(2, 31);
insert into products(prod_id, version, pgid, flag) values (11, 101, 21, 'Y');
insert into products(prod_id, version, pgid, flag) values (22, 101, 21, 'N');
insert into products(prod_id, version, pgid, flag) values(33, 101, 31, 'N');
declare
prod_version NUMBER := :1 ;
begin
update items i set i.prod_id = (
select p.prod_id from products p where
p.version = prod_version and p.pgid = i.pgid and rownum =1
order by p.flag desc
) where i.xyz is null
commit; end;
产品表有两个条目 - 伪(标志 = 'Y')和实际(标志 = 'N')。
如果没有伪产品,则需要获取实际产品。
上述查询导致编译错误。内部查询可能返回多个记录,但我只需要第一个(即“Y”记录。如果找不到“Y”记录,则需要“N”记录)。