Oracle:SQL AES256中Java编译错误成功

Oracle:SQL AES256中Java编译错误成功,java,oracle,plsql,oracle-sqldeveloper,oracle-apex,Java,Oracle,Plsql,Oracle Sqldeveloper,Oracle Apex,我有一个使用AES 256加密JSON数据的Java代码。它完全按照命令提示中的预期工作。但当我将其转换为SQL(Oracle server)时,它会抛出一个错误“编译错误成功”。代码如下: create or replace JAVA SOURCE NAMED encryptData AS import java.io.*; import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; import ja

我有一个使用AES 256加密JSON数据的Java代码。它完全按照命令提示中的预期工作。但当我将其转换为SQL(Oracle server)时,它会抛出一个错误“编译错误成功”。代码如下:

create or replace JAVA SOURCE NAMED encryptData AS
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;

import javax.xml.bind.DatatypeConverter;
import java.lang.Exception;

import java.util.Scanner;
import java.io.FileInputStream;
import java.io.BufferedReader;
import java.io.FileReader;

public class encryptData {

    public static string encryptJSONCall(String jsonPath, String decSEK) {
    String decSEK = decSEK;

    File file = new File(jsonPath);
    Scanner sc = new Scanner(file);
    sc.useDelimiter("\\Z");

    String json = removeWhitespaces(sc.next().replace("\n", "").replace("\r", ""));

    String encryptedResult = encryptBySymmetricKey(json, decSEK);
    System.out.println(encryptedResult);
    return encryptedResult;
  }

  public static String removeWhitespaces(String json) {

    boolean quoted = false;
    boolean escaped = false;
    String out = "";

    for(Character c : json.toCharArray()) {

      if(escaped) {
        out += c;
        escaped = false;
        continue;
      }

      if(c == '"') {
        quoted = !quoted;
      } else if(c == '\\') {
        escaped = true;
      }

      if(c == ' ' &! quoted) {
        continue;
      }

      out += c;

    }

    return out;

  }

  public static String encryptBySymmetricKey(String json, String decryptedSek) {
    byte[] sekByte = DatatypeConverter.parseBase64Binary(decryptedSek);
    Key aesKey = new SecretKeySpec(sekByte, "AES");
    try {
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
      cipher.init(Cipher.ENCRYPT_MODE, aesKey);
      byte[] encryptedjsonbytes = cipher.doFinal(json.getBytes());
      String encryptedJson = DatatypeConverter.printBase64Binary(encryptedjsonbytes);
      return encryptedJson;
    }
    catch(Exception e) {
      return "Exception "+e;
    }
  }

}
/

 CREATE OR REPLACE FUNCTION encryptData_func(P_json varchar2,p_decSEK VARCHAR2)
 RETURN VARCHAR2 AS
    LANGUAGE JAVA NAME 'encryptData.encryptJSONCall( java.lang.String,java.lang.String ) 
    return java.lang.String'; 

问题是我无法找到导致错误的原因,因为系统没有给出其他解释。它只是说“编译错误成功”。哪里出错了?

我想
创建或替换函数encryptData\u func…
返回了该错误。如果是这样,请连接到该Oracle用户并运行

select * 
from user_errors
where name = 'ENCRYPTDATA_FUNC';       --> note uppercase here!

例如:

SQL> create or replace function f_test
  2    return number
  3  as
  4  begin
  5    retval = 1;
  6  end;
  7  /

Warning: Function created with compilation errors.

SQL> select line, position, text
  2  from user_errors
  3  where name = 'F_TEST';

      LINE   POSITION TEXT
---------- ---------- ----------------------------------------------------
         5         10 PLS-00103: Encountered the symbol "=" when expecting
                      one of the following: := . ( @ % ;

                      The symbol ":= was inserted before "=" to continue.

既然您知道了它的问题所在,您就可以修复它了(希望如此)。

这是否回答了您的问题?