【问题标题】:'ORA-02376: invalid or redundant resource' occurs on execute immediate“ORA-02376: 无效或冗余资源”在立即执行时发生
【发布时间】:2018-03-13 16:39:42
【问题描述】:

问题:“ORA-02376:无效或冗余资源”出现在执行立即 (v_sql_stmt) 语句上。

已执行故障排除:包括 dbms_output.out_line (v_sql_stmt),它会从阵列中生成格式正确的命令,并且在复制 dbms 输出以在阵列外部单独手动运行命令时 - 9 个 alter profile 命令成功执行。此外,将数组减少到只有一个值(failed_login_attempts 3),ORA 错误仍然发生在执行立即语句上(不是真正的具有一个值的数组,只是试图排除故障)。 ORA-02376 的研究表明“未定义或指定两次的资源出现在 create 或 alter profile 语句中”。 dbms_output.put_line 显示没有两次指定任何资源,并且由于命令在数组外成功运行,我的想法是它们已定义。

问题:知道为什么 ORA-02376 出现在执行立即 (v_sql_stmt) 命令上吗?

声明 TYPE array_n 是 VARRAY (9) OF VARCHAR2 (29);

array        array_n
                 := array_n ('failed_login_attempts 3',
                             'idle_time 15',
                             'password_grace_time 5',
                             'password_life_time 35',
                             'password_lock_time unlimited',
                             'password_reuse_max 1024',
                             'password_reuse_time 365',
                             'password_verify_function null',
                             'sessions_per_user 1024');
v_sql_stmt   VARCHAR (90);
v_env        VARCHAR2 (10);
v_date       DATE;

开始 SELECT environment INTO v_env FROM core.site;

IF v_env = 'PROD'
THEN
    FOR i IN 1 .. array.COUNT
    LOOP
        v_sql_stmt := 'alter profile default limit ' || array (i) || ';';
        DBMS_OUTPUT.put_line (v_sql_stmt);

        EXECUTE IMMEDIATE (v_sql_stmt);
    END LOOP;
ELSE
    SELECT SYSDATE INTO v_date FROM DUAL;

    DBMS_OUTPUT.put_line (v_date);
END IF;

结束;


第 2 行出错 ORA-02376: 无效或冗余资源 ORA-06512: 在第 27 行

【问题讨论】:

    标签: arrays oracle12c


    【解决方案1】:

    execute immediate 中的 sql 语句不应该有 ;在每个语句的末尾,因此更改以下行更正了问题...

    v_sql_stmt := 'alter profile default limit ' || array ( I ) ;
    

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2016-11-08
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多