Oracle11g Oracle更新语句
我正在尝试更新一个有点棘手的表格。让我试着解释一下。。 这是表格数据 下面是我想如何更新col5。 对于每个记录,检查col3是否有值,如果是,则检查col2中的值。如果两个条件都满足,则获取col1的最大值,因为col2将有重复项。 如果col3没有值,我们需要检查col4并与col2进行比较,得到col1 例如:对于第5行,我将首先检查col3,它的值为'b',我将检查col2的值'b',我有3个匹配的col1-ID2,7,9需要从col1中获取9,并在第5行更新col5Oracle11g Oracle更新语句,oracle11g,Oracle11g,我正在尝试更新一个有点棘手的表格。让我试着解释一下。。 这是表格数据 下面是我想如何更新col5。 对于每个记录,检查col3是否有值,如果是,则检查col2中的值。如果两个条件都满足,则获取col1的最大值,因为col2将有重复项。 如果col3没有值,我们需要检查col4并与col2进行比较,得到col1 例如:对于第5行,我将首先检查col3,它的值为'b',我将检查col2的值'b',我有3个匹配的col1-ID2,7,9需要从col1中获取9,并在第5行更新col5 请提出您有价值的想
请提出您有价值的想法。我已经为您的第一个条件编写了代码,如果您将col3与现有和不存在的条件匹配,您可以在过程中编写与col4匹配的代码
create or replace procedure proc_cal is
d_col1 varchar2(3);
d_col2 varchar2(3);
maxcol varchar2(3):= '0';
begin
for i in (select * from coldata) loop
dbms_output.put_line('in here '|| i.col3);
if (i.col3 is not null) then
dbms_output.put_line('value exists for col3 and is ' || i.col3);
for j in (select * from coldata) loop
if (j.col2 = i.col3) then
dbms_output.put_line('value exists for col2 and col1 value is ' ||
j.col1);
dbms_output.put_line('the prev maxcol is '|| maxcol);
if (maxcol < j.col1) then
dbms_output.put_line('checking');
maxcol := j.col1;
dbms_output.put_line('current maxcol is ' || maxcol);
end if;
end if;
end loop;
update coldata set col5 = maxcol where col3=i.col3;
dbms_output.put_line('max value update and is ' || maxcol);
maxcol:=0;
else
update coldata set col5 = null where col3=i.col3;
end if;
end loop;
end;
SCOTT@research 13-APR-15> select * from coldata;
COL COL COL COL COL
--- --- --- --- ---
1 a a
2 b c
3 a a 8
4 c c
5 a b 9
6 c b
7 b c e 10
8 a a
9 b b
10 c c
在将来,如果您可以为您的示例提供一个CREATEDDL和一些INSERT语句,那将是非常棒的,但这里有一个非过程性的解决方案
CREATE TABLE t (
col1 NUMBER,
col2 VARCHAR2(1),
col3 VARCHAR2(1),
col4 VARCHAR2(1),
col5 NUMBER
);
INSERT INTO t VALUES (1, 'a', NULL, 'a', NULL);
INSERT INTO t VALUES (2, 'b', NULL, 'c', NULL);
INSERT INTO t VALUES (3, 'a', 'a', NULL, NULL);
INSERT INTO t VALUES (4, 'c', NULL, 'c', NULL);
INSERT INTO t VALUES (5, 'a', 'b', NULL, NULL);
INSERT INTO t VALUES (6, 'c', NULL, 'b', NULL);
INSERT INTO t VALUES (7, 'b', 'c', 'e', NULL);
INSERT INTO t VALUES (8, 'a', NULL, 'a', NULL);
INSERT INTO t VALUES (9, 'b', NULL, 'b', NULL);
INSERT INTO t VALUES (10, 'c', NULL, 'c', NULL);
UPDATE t t1
SET t1.col5 =
(SELECT MAX(t2.col1)
FROM t t2
WHERE t2.col2 = t1.col3)
WHERE t1.col3 IS NOT NULL;
SELECT *
FROM t;
/*
col col col col col
1 a a
2 b c
3 a a 8
4 c c
5 a b 9
6 c b
7 b c e 10
8 a a
9 b b
10 c c
*/