我试图在包含一列重命名多个记录特殊字符重命名多个记录甲骨文
WHERE REGEXP_LIKE(Name, '[[email protected]#$%^&*=+/<>?|]') ;
我试图获取一个包含特殊字符到一个数组,遍历它的每一个记录更新声明。 但是....当我尝试更改第一个记录时,其他(3)也更改为新值。
我尝试使用输入字段/箱设置新的价值,还有一个possibilty改变文本框的旧值线以上(TE与特殊字符的名称)
CREATE TABLE LOCATION
( "ID" NUMBER PRIMARY KEY,
"NAME" VARCHAR2(20 BYTE)
) ;
Insert into SYSTEM.LOCATION (ID,NAME) values ('2','RE#$');
Insert into SYSTEM.LOCATION (ID,NAME) values ('3','rete%#');
Insert into SYSTEM.LOCATION (ID,NAME) values ('4','Testjue');
Insert into SYSTEM.LOCATION (ID,NAME) values ('5','Test#');
/
DECLARE
CURSOR name_cursor IS
SELECT id, name
FROM Location
WHERE REGEXP_LIKE(name, '[[email protected]#$%^&*=+/<>?|]')
FOR UPDATE OF name;
BEGIN
FOR loc_rec IN name_cursor LOOP
DBMS_Output.Put_Line(loc_rec.name);
UPDATE Location SET name = '&whatever' WHERE Location.id=loc_rec.ID;
END LOOP;
END;
这改变了表中的所有值与特殊字符的提示输入“无论”,但我需要为每个记录设置不同的值。
这里的图片当输入为“测试”
难道你不能直接更新,而不使用游标? 'UPDATE Location SET name ='&v_location'WHERE REGEXP_LIKE(name,'[!@#$%^&* = +/<>?|]');'。至于为一个语句进行多行更新,可能它们对'name'具有相同的值。 –
我得到了3个名字,tes#%t,$ tac%,&verflow,我希望它们以正确的方式更改,tes#%t必须成为测试,$ tac%必须成为堆栈等等。所以我想循环你选择的项目,并改变他们个人 – Isene112
你的意思是三个具有相同价值的名字?如果是这样的话,并且如果你想用游标一次处理它们,你必须以其他方式识别行,例如通过主键。如果这是你想要做的,请张贴表格结构,我可以帮忙。 –