gpt4 book ai didi

oracle - PL/SQL 游标循环

转载 作者:行者123 更新时间:2023-12-01 14:38:36 26 4
gpt4 key购买 nike

我相信我需要一个游标循环来遍历表 test_data 中的 street1 列。我有一个程序需要测试表中的每一行。

这是我到目前为止:

cursor c1 is
street1
from test_data

Begin
If Instr(street1, ‘Cnr’, 1) >= 1;
Then
Newstreetname := Substr(street1, Instr(street1, ‘Cnr’, 1)+3);
Else if
Instr(street1, ‘PO Box’, 1) >= 1;
Then
Newstreetname:= Substr(street1, Instr(street1, ‘PO Box’, 1));
Else if
REGEXP_ Instr (street1, [\d], 1) = 0;
Then
Newstreetname:= street1;
Else if
REGEXP_ Instr (street1, [\d], 1) >= 1;
Then
Newstreetnumber:= regexp_substr(street1, '\d+(\s|\/)(\d+)?-?(\d+)?(\w {1})?');
Newstreetname:= regexp_substr(street1, '(\w+\s\w+)$');
End

最佳答案

*1.您需要在游标定义中使用 SELECT 和分号

*2.您可以在光标上添加 FOR LOOP

例如:

    DECLARE
cursor c1 is
SELECT street1
from test_data;
r1 c1%ROWTYPE;
BEGIN
FOR r1 IN c1 LOOP
... do your stuff with r1.street1
END LOOP;
END;

或者,您可以完全避免显式游标定义,例如:
FOR r1 IN (SELECT street1 FROM test_data) LOOP
... do your stuff with r1.street1
END LOOP;

*3.您的 IF 语句不能包含分号 - 例如:
    If
Instr(r1.street1, 'Cnr', 1) >= 1
Then

*4. [编辑] 所以你想更新你的表,列 newstreetnumbernewstreetname - 在这种情况下,你可以做这样的事情:
    DECLARE
cursor c1 is
SELECT street1
from test_data
FOR UPDATE;
r1 c1%ROWTYPE;
BEGIN
FOR r1 IN c1 LOOP
... do your stuff with r1.street1
UPDATE test_data
SET newstreetnumber = ...
,newstreetname = ...
WHERE CURRENT OF c1;
END LOOP;
END;

但是,请注意,这对于大容量而言效果不佳,我更愿意在一个 UPDATE 语句中完成所有操作。

关于oracle - PL/SQL 游标循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com