代码之家  ›  专栏  ›  技术社区  ›  Michał Niklas

Solaris上如何在Oracle上安装Java类

  •  2
  • Michał Niklas  · 技术社区  · 16 年前

    我有一个简单的Java类来计算Sa1,我想从Oracle中的PLSQL过程中使用它。 以下建议来自: SHA1, SHA256, SHA512 in Oracle for free without using DBMS_CRYPTO (我的简单用例使用的是一种不需要任何容器,只包含导入和Java的IO)。

    我编译sha1.java时使用了:

    javac -target 1.2 -source 1.2 sha1.java
    

    并在我的Windows测试环境中安装了此sha1.class:

    Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
    

    不幸的是,我必须在solaris上安装它:

    Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.8.0 - Production
    

    我试过了,但是那些尝试失败了:

    c:\test>loadjava -thin -user ***** -resolve sha1.class
    Error while creating class sha1
        ORA-29545: badly formed class:: User has attempted to load a class (sha1) into a restricted package. Permission can be granted using  dbms_java
    .grant_permission(<user>, LoadClassInPackage...
    
    The following operations failed
        class sha1: creation
    exiting  : Failures occurred during processing
    

    编辑 :

    我尝试了.java源,而不是.class,我得到了(从波兰翻译过来的):

    c:\mn>loadjava -thin -user ****** -resolve sha1.java
    Error while creating sha1
        ORA-06576: not a valid function or procedure name
    
    Error while computing shortname of sha1
        ORA-06550: line 1, column 13:
    PLS-00201: must be declared 'DBMS_JAVA.SHORTNAME' must be declared
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored
    
    The following operations failed
        source sha1: creation
    exiting  : Failures occurred during processing
    

    在solaris上如何将此类或源加载到oracle?

    2 回复  |  直到 16 年前
        1
  •  1
  •   dpbradley    16 年前

    必须运行dbms_java.grant_permission包(详细信息应该在错误消息中,在某些情况下还会显示在数据库服务器文件系统的跟踪文件中)。

    作为sys并从sql接口连接:

    begin
     dbms_java.grant_permission(........);
    end;
    
        2
  •  1
  •   Brian    16 年前

    如果您有权限,我的直觉是,您要么需要在Java包中拥有类,要么小写类名称混淆了Solaris上的验证器(一个区分大小写的环境,类名应该以大写字母开头)。

    而不是

    public class shai{
    
    }
    

    尝试使用一个包和有效的类名。

    package com.company.Util
    public class Shai{
    
    }