尝试从Oracle数据库导出java源代码

时间:2010-03-18 16:20:33

标签: java oracle plsql

我正在尝试使用以下代码从oracle数据库导出java对象的源代码。

DECLARE
  blob1 BLOB;
BEGIN
  DBMS_LOB.CREATETEMPORARY(blob1, FALSE);
  DBMS_JAVA.EXPORT_SOURCE('OBJECTNAME', 'SCHEMANAME', blob1);  
END;

每当我尝试运行它时,我都会遇到这个异常:

oracle.aurora.rdbms.ModifyPermissionException

即使我作为系统运行。是什么导致了这个以及如何让它发挥作用。

调查了一下,当它作为sysdba运行时,以及拥有这些对象的用户时,它有效。不幸的是我正在制作一个程序来转储Oracle数据库中的java对象,我无法强迫我的用户成为sysdba或对象的所有者。

有什么办法可以阻止这个错误吗?

2 个答案:

答案 0 :(得分:0)

连接时使用“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>

答案 1 :(得分:0)

我遇到了同样的问题,但在google上进行了几次搜索之后我解决了这个问题。可能会帮助某人。

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;