下面的语句作用是查找LIMIT不为90的,然后将概要文件名PROFILE赋值给变量,然后利用ALTER将该变量对应的PROFILE记录修改LIMIT为90,直到符合条件全部记录修改完成。但执行时,提示“概要文件VA不存在”,请问怎样处理?谢谢!!!DECLARE va VARCHAR(100); lp NUMBER;
BEGIN
  lp := 1;
  WHILE lp > 0 LOOP
    SELECT profile INTO va FROM dba_profiles WHERE resource_name = UPPER('password_life_time') AND limit != 90 AND ROWNUM < 2;
    EXECUTE IMMEDIATE 'ALTER PROFILE va LIMIT PASSWORD_LIFE_TIME 90';
    SELECT COUNT(*) INTO va FROM dba_profiles WHERE resource_name = UPPER('password_life_time') AND limit != 90;
  END LOOP;
END;

解决方案 »

  1.   

    DECLARE
      va VARCHAR(100);
      lp NUMBER;
    BEGIN
      lp := 1;
      WHILE lp > 0 LOOP
        --LIMIT字段为VARCHAR2
        SELECT profile
          INTO va
          FROM dba_profiles
         WHERE resource_name = UPPER('password_life_time')
           AND LIMIT != '90'
           AND ROWNUM < 2;
        EXECUTE IMMEDIATE 'ALTER PROFILE ' || va ||
                          ' LIMIT PASSWORD_LIFE_TIME 90';
        SELECT COUNT(*)
          INTO lp
          FROM dba_profiles
         WHERE resource_name = UPPER('password_life_time')
           AND LIMIT != '90';
      END LOOP;
    END;
    /
      

  2.   

    --使用游标循环更简单
    BEGIN
      FOR c IN (SELECT profile
                  FROM dba_profiles
                 WHERE resource_name = UPPER('password_life_time')
                   AND LIMIT != '90') LOOP
        EXECUTE IMMEDIATE 'ALTER PROFILE ' || c.profile ||
                          ' LIMIT PASSWORD_LIFE_TIME 90';
      
      END LOOP;
    END;
    /