一半记录的设置值(Oracle、PL/SQL)
我正在尝试循环表A中的所有记录,为columnA=1和columnA=2的一半记录设置一半记录的设置值(Oracle、PL/SQL),sql,oracle,loops,plsql,oracle12c,Sql,Oracle,Loops,Plsql,Oracle12c,我正在尝试循环表A中的所有记录,为columnA=1和columnA=2的一半记录设置 declare Type T2 Is Table Of TableA%Rowtype Index By Binary_Integer; V2 T2; Type T3 Is Table Of TableA%Rowtype Index By Binary_Integer; V3 T3; Maxrow Number(10); mHalf Number(10); begin Select round(Max
declare
Type T2 Is Table Of TableA%Rowtype Index By Binary_Integer;
V2 T2;
Type T3 Is Table Of TableA%Rowtype Index By Binary_Integer;
V3 T3;
Maxrow Number(10);
mHalf Number(10);
begin
Select round(Max(Rownum)/2) Into Maxrow From TableA;
Select * Bulk Collect Into V2 From TableA Where Rownum < Mhalf;
Select * Bulk Collect Into V3 From TableA Where Rownum >= Mhalf;
For I In 1..2 Loop
If I=1 Then
For Z In V2.First..V2.Last Loop
update tableA set columnA = 1 where Rownum = V2(Z);
End Loop;
Elsif I=2 Then
For ZZ In V3.First..V3.Last Loop
update tableA set columnA = 2 where Rownum = V3(ZZ);
End Loop;
End if;
End Loop;
end;
这里我没有任何记录
declare
mHalf Number;
l_rec TableA%rowtype;
cntr NUMBER := 1;
CURSOR cur IS Select * From TableA FOR UPDATE OF columnA;
begin
Select round(count(*)/2,0) Into mHalf From TableA;
OPEN cur;
LOOP
FETCH cur INTO l_rec;
EXIT WHEN cur%notfound;
UPDATE
tableA
SET
columnA=CASE WHEN cntr <= mhalf then 1 else 2 end
WHERE
CURRENT OF cur;
cntr := cntr +1;
END LOOP;
Commit;
end;
改为:
SELECT *
BULK COLLECT INTO V2
FROM (
SELECT a.*,
ROWNUM rn
FROM (
SELECT *
FROM tablea
) a
)
WHERE rn < Mhalf;
SELECT *
BULK COLLECT INTO V#
FROM (
SELECT a.*,
ROWNUM rn
FROM (
SELECT *
FROM tablea
) a
)
WHERE rn >= Mhalf;
改为:
SELECT *
BULK COLLECT INTO V2
FROM (
SELECT a.*,
ROWNUM rn
FROM (
SELECT *
FROM tablea
) a
)
WHERE rn < Mhalf;
SELECT *
BULK COLLECT INTO V#
FROM (
SELECT a.*,
ROWNUM rn
FROM (
SELECT *
FROM tablea
) a
)
WHERE rn >= Mhalf;
对于V2,您可以按rownum desc订购;从表格A L中选择Rownum,L.*,其中Rownum<300按Rownum desc排序--不工作HMMM,我正在准备一个带有游标的解决方案,或者某些内容错误:PLS-00394:FETCH语句的INTO列表中的值数目错误。对于V2,我有,您可以按rownum desc订购;从表格A L中选择Rownum,L.*,其中Rownum<300按Rownum desc排序--不工作HMMM,我正在准备一个带有光标的解决方案,或者有什么错误:PLS-00394:FETCH语句的INTO列表中的值数目错误我尝试过但不工作…..从SELECT a中选择**,从tableA中选择ROWNUM rn,其中rn<2;FINEAnswer是否已更新,请立即尝试。很抱歉,它不起作用,anway thx寻求帮助,已@Ted在ORCL。Pro正在工作。greatI已尝试,但不工作…..从选择a中选择*。*从表a中选择ROWNUM rn,其中rn<2;FINEAnswer已更新,请立即尝试。很抱歉,它不起作用,anway thx寻求帮助,已经@Ted在ORCL。Pro在Rownum>300的情况下工作得很好;将永远不会返回任何行:测试大于正整数的ROWNUM值的条件总是错误的是,来自@Ted at ORCL.Pro的代码是精细的,但是PL/SQL在这里完全是一种过火的行为。这只需一个简单的更新语句即可完成。请演示如何执行更新,谢谢!更新表a集合列a=modrownum,2+1,其中Rownum>300;将永远不会返回任何行:测试大于正整数的ROWNUM值的条件总是错误的是,来自@Ted at ORCL.Pro的代码是精细的,但是PL/SQL在这里完全是一种过火的行为。这只需一个简单的更新语句即可完成。请演示如何执行更新,谢谢!更新表a集合列a=modrownum,2+1
SELECT *
BULK COLLECT INTO V2
FROM (
SELECT a.*,
ROWNUM rn
FROM (
SELECT *
FROM tablea
) a
)
WHERE rn < Mhalf;
SELECT *
BULK COLLECT INTO V#
FROM (
SELECT a.*,
ROWNUM rn
FROM (
SELECT *
FROM tablea
) a
)
WHERE rn >= Mhalf;