Oracle mn 58:PL/SQL:ORA-00904::无效标识符ORA-06550:第10行第5列:PL/SQL:SQL语句忽略06550。00000-“第%s行,第%s列:\n%s”*原因:通常是PL/SQL编译错误。我试图稍微更改一下语句:UPDATE Lo

Oracle mn 58:PL/SQL:ORA-00904::无效标识符ORA-06550:第10行第5列:PL/SQL:SQL语句忽略06550。00000-“第%s行,第%s列:\n%s”*原因:通常是PL/SQL编译错误。我试图稍微更改一下语句:UPDATE Lo,oracle,loops,plsql,oracle11g,sql-update,Oracle,Loops,Plsql,Oracle11g,Sql Update,mn 58:PL/SQL:ORA-00904::无效标识符ORA-06550:第10行第5列:PL/SQL:SQL语句忽略06550。00000-“第%s行,第%s列:\n%s”*原因:通常是PL/SQL编译错误。我试图稍微更改一下语句:UPDATE Location SET name='which'WHERE Location.id=loc\u rec.id;但是,当我运行它时,我将所有3条记录都更改为任意值,而不是1条记录。我尝试此操作时没有收到任何错误。如果您有当前loc_rec的位置,则


mn 58:PL/SQL:ORA-00904::无效标识符ORA-06550:第10行第5列:PL/SQL:SQL语句忽略06550。00000-“第%s行,第%s列:\n%s”*原因:通常是PL/SQL编译错误。我试图稍微更改一下语句:UPDATE Location SET name='which'WHERE Location.id=loc\u rec.id;但是,当我运行它时,我将所有3条记录都更改为任意值,而不是1条记录。我尝试此操作时没有收到任何错误。如果您有当前loc_rec的
位置,则光标名称必须为
loc_rec
。您是作为匿名块(从
声明开始)还是作为过程(从
创建或替换过程abc开始)执行此操作?如果您使用
,其中location.id=lock\u rec.id
id
是主键,我不知道有什么方法可以更新三行。如果你仍然有问题,你能发布你的代码吗?
WHERE REGEXP_LIKE(Name, '[!@#$%^&*=+/<>?|]') ;
  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, '[!@#$%^&*=+/<>?|]')
    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;
DECLARE
  CURSOR name_cursor IS
    SELECT id, name
    FROM Location
    WHERE REGEXP_LIKE(name, '[!@#$%^&*=+/<>?|]')
    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 CURRENT OF loc_rec;
  END LOOP;
END;
DECLARE
  CURSOR name_cursor IS
    SELECT id, name
    FROM Location
    WHERE REGEXP_LIKE(name, '[!@#$%^&*=+/<>?|]')
    FOR UPDATE OF name;
BEGIN
  FOR loc_rec IN name_cursor LOOP
    DBMS_Output.Put_Line(loc_rec.name);
    UPDATE Location
      SET name = CASE LOC_REC.ID
                   WHEN '4' THEN 'Testjue'
                   ELSE 'Test'
                 END
      WHERE Location.id=loc_rec.ID;
  END LOOP;
END;
UPDATE Location 
    SET name = translate (name
        , 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*=+/<>?|'
        , 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
    WHERE REGEXP_LIKE(name, '([!@#\$%\^&\*=\+/<>\?\|]+)')
/ 
UPDATE Location 
    SET name = translate (name
                 , '!@#$%^&*=+/<>?|'
                 , 'la3sk6787abciqi'
                         )
   WHERE REGEXP_LIKE(name, '([!@#\$%\^&\*=\+/<>\?\|]+)') 
/
        ID NAME               
---------- --------------------
         2 RE#$                 
         3 rete%#
SELECT *
FROM LOCATION
    WHERE REGEXP_LIKE(name, '[!@#$%^&*=+/<>?|]');
/
DECLARE
  CURSOR name_cursor IS
    SELECT id, name
    FROM Location
    WHERE REGEXP_LIKE(name, '[!@#$%^&*=+/<>?|]')
    FOR UPDATE OF name;
    v_RecordID number;
BEGIN
  v_RecordID := &ID;
  FOR loc_rec IN name_cursor LOOP
    DBMS_Output.Put_Line(loc_rec.name);
        UPDATE Location SET name = '&Name'
        WHERE Location.id=v_RecordID;
  END LOOP;
END;