如何检查我是否有权创建功能?
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 交谈。
所以我正在尝试创建一个存储函数,但我一直收到此错误:
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 交谈。