试图从 Oracle 数据库中导出 java 源代码
Posted
技术标签:
【中文标题】试图从 Oracle 数据库中导出 java 源代码【英文标题】:trying to export java source code from an Oracle database 【发布时间】:2010-03-18 16:20:32 【问题描述】:我正在尝试使用以下代码从 oracle 数据库中导出 java 对象的源代码。
DECLARE
blob1 BLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(blob1, FALSE);
DBMS_JAVA.EXPORT_SOURCE('OBJECTNAME', 'SCHEMANAME', blob1);
END;
每当我尝试运行它时,我都会收到此异常:
oracle.aurora.rdbms.ModifyPermissionException
即使我以 System.任何想法是什么导致了这种情况以及我如何让它发挥作用。
经过深入调查后,它在以 sysdba 和拥有对象的用户身份运行时工作。不幸的是,我正在制作一个程序来转储 Oracle 数据库中的 java 对象,但我不能真正强迫我的用户成为 sysdba 或对象的所有者。
有什么办法可以阻止这个错误?
【问题讨论】:
您可能已经尝试过授予执行权限,对吧?我似乎记得有系统无法运行 procs 的问题,因为它们没有 exec privs。看起来很奇怪,但我知道它偶尔会发生。 我想是的,尽管我完全有可能弄错了。问题是它似乎正在执行 DBMS_JAVA.EXPORT_SOURCE,但在运行 EXPORT_SOURCE 过程的过程中出现了异常。 如果你做了这样的事情,你可能做对了: SQL> connect sys/password SQL> grant execute on dbms_java to system; SQL> 连接系统/密码 SQL> @script (运行你的脚本) 好吧,我又做了一次以确保它仍然无法正常工作,所以我想这不是问题。 【参考方案1】:连接时使用“as sysdba”选项。当我以 sysdba 身份登录时,我没有收到 ModifyPermissionException。请参阅下面的我的操作。我得到的 ORA-29532 是因为我的数据库中没有 Java 类。让我知道它是否对你有用。
C:\Documents and Settings\KrassimirB>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Mar 18 15:58:10 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> connect sys/oracle@orcl as sysdba
Connected.
SQL> @C:\tmp\java_export.sql
7 /
DECLARE
*
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception:
java.sql.SQLException: no such java schema object
ORA-06512: at "SYS.DBMS_JAVA", line 182
ORA-06512: at line 5
SQL>
【讨论】:
这可行,但我正在编写一个工具来检索数据库中的 java 代码,我不能强制用户成为 sysdba。如果您以拥有该对象的用户身份登录,它似乎也可以工作。【参考方案2】:我遇到了同样的问题,但在谷歌上搜索了几次后,我解决了。可能会帮助某人。
DECLARE
b CLOB;
c varchar2(2000);
i integer:= 255;
begin
DBMS_LOB.createtemporary(b, false);
DBMS_JAVA.export_resource('<object_name>', '<schema_name>', b);
DBMS_OUTPUT.PUT_LINE('java_resource:');
DBMS_LOB.read(b, i, 1, c);
DBMS_OUTPUT.PUT_LINE(c);
end;
【讨论】:
以上是关于试图从 Oracle 数据库中导出 java 源代码的主要内容,如果未能解决你的问题,请参考以下文章