如何检查我是否有权创建功能?

How to check if i have the rights to create functions?

所以我正在尝试创建一个存储函数,但我一直收到此错误:

Error report -
ORA-00604: error occurred at recursive SQL level 1
ORA-20900: No access to modify schema
ORA-06512: at line 3
00604. 00000 -  "error occurred at recursive SQL level %s"
*Cause:    An error occurred while processing a recursive SQL statement
           (a statement applying to internal dictionary tables).
*Action:   If the situation described in the next error on the stack
           can be corrected, do so; otherwise contact Oracle Support.

事实是,2-3 小时前我创建了一些函数并且工作得很好。我真的不明白发生了什么。

代码在这里(我不知道这是否相关,因为函数甚至没有去编译)

CREATE OR REPLACE FUNCTION wsxsxfunct(x_data number)
    return ECHIPE.id_echipa%type IS
    y ECHIPE.id_echipa%type;
BEGIN
    SELECT ID_ECHIPA INTO y
    FROM ECHIPE E, PILOTI P, REZULTATE R, CURSE C
    WHERE P.ID_PILOT = R.ID_PILOT
    AND E.ID_ECHIPA = P.ECHIPA
    AND R.ID_CURSA = C.ID_CURSA
    AND EXTRACT(MONTH FROM C.DATA_CURSA) = x_data;
    RETURN y;
    EXCEPTION
        WHEN NO_DATA_FOUND
            THEN dbms_output.put_line('Nu a avut loc nicio cursa in luna ' || x_data);
            RAISE_APPLICATION_ERROR(-20000,
                'Nu exista angajati cu numele dat');
        WHEN TOO_MANY_ROWS
            THEN dbms_output.put_line('Au avut loc mai multe curse in luna ' || x_data);
            RAISE_APPLICATION_ERROR(-20001,
                        'Exista mai multi angajati cu numele dat');
        WHEN OTHERS
            THEN dbms_output.put_line('Trebuie sa apelezi functia cu un numar intre 1-12, reprezentand numarul lunii');
            RAISE_APPLICATION_ERROR(-20002,'Alta eroare!');
END;
/

忽略代码中的那些消息。谢谢

编辑:

我尝试了几个小时前创建的函数中的旧代码,但我仍然收到相同的错误报告。

ORA-20900(通常是 20000 到 20999 之间的错误)是 'custom' 错误,即它们来自对 RAISE_APPLICATION_ERROR.

的调用

因此这不是(本机)权限问题。很可能是管理员创建了一个 DDL 触发器,它阻止您尝试创建函数(以及可能的其他对象)。

与您的 DBA 交谈。