2017-04-13 7 views
1

Oracle 12ではOracle 9からコンパイルエラーが発生しているため、使用していた小さなJavaコードです。古いOracleバージョンでコンパイルされたJavaコードでは、Oracle 12.2でコンパイルエラーが発生する

(コードはここに発祥のように見えます:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:439619916584を)我々は、Javaコードまたは付与する必要がありますいくつかの新しい権限を変更する必要があるように

は12.2で変更何かを持っていますか?

編集:SQL挿入コードで行をコメントアウトすると、正しいコンパイルが行われます。おそらくその構文はもはや利用できないでしょうか?

create or replace and compile java source named "DirList" 
as 
    import java.io.*; 
    import java.sql.*; 
    import java.text.SimpleDateFormat; 

    public class ChpDirList{ 

     public static void getList(String directory) 
         throws SQLException { 

     File path = new File(directory); 
     String[] list = path.list(); 
     String element; 

     for(int i = 0; i < list.length; i++){ 

      element = list[i]; 

      String fpath=directory+"/"+list[i]; 
      File f = new File(fpath); 
      long len; 

      String ftype; 

      if (f.isFile()) { 

       len = f.length(); 
       ftype = "F"; 

      } else { 

       len = 0; 
       ftype = "D"; 
      } 

      #sql { INSERT INTO NGM_DIR_LIST (file_name, file_length, file_type, file_modified) 
        VALUES (:element, :len, :ftype, null) }; 
     } 
     } 
    } 
/

エラーメッセージ:

Compilation errors for JAVA SOURCE NGM42.DIRLIST 

#13#10Error: An exception has occurred in the compiler (1.8.0_121-ea). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you. 

Line: 0 

#13#10Error: java.lang.IllegalArgumentException 

Line: 0 

#13#10Error: at com.sun.tools.javac.util.JCDiagnostic.<init>(JCDiagnostic.java:412) 

Line: 0 

#13#10Error: at com.sun.tools.javac.util.JCDiagnostic$Factory.create(JCDiagnostic.java:238) 

Line: 0 

#13#10Error: at com.sun.tools.javac.util.JCDiagnostic$Factory.error(JCDiagnostic.java:103) 

Line: 0 

#13#10Error: at com.sun.tools.javac.util.AbstractLog.error(AbstractLog.java:117) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavaTokenizer.lexError(JavaTokenizer.java:136) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavaTokenizer.readToken(JavaTokenizer.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.Scanner.nextToken(Scanner.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.nextToken(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.accept(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.block(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.block(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.parseStatement(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.blockStatement(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.parseStatementAsBlock(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.parseStatement(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.blockStatement(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.blockStatements(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.block(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.block(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.parseStatement(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.blockStatement(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.parseStatementAsBlock(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.parseStatement(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.blockStatement(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.blockStatements(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.block(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.block(JavacParser.java) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.methodDeclaratorRest(JavacParser.java:3586) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.classOrInterfaceBodyDeclaration(JavacParser.java:3532) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.classOrInterfaceBody(JavacParser.java:3436) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.classDeclaration(JavacParser.java:3285) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.classOrInterfaceOrEnumDeclaration(JavacParser.java:3226) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.typeDeclaration(JavacParser.java:3215) 

Line: 0 

#13#10Error: at com.sun.tools.javac.parser.JavacParser.parseCompilationUnit(JavacParser.java:3155) 

Line: 0 

#13#10Error: at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:676) 

Line: 0 

#13#10Error: at com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:1037) 

Line: 0 

#13#10Error: at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:926) 

Line: 0 

#13#10Error: at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:890) 

Line: 0 

#13#10Error: at oracle.aurora.jdkcompiler.JdkDriver.compile(JdkDriver.java:572) 

Line: 0 

#13#10Error: at oracle.aurora.rdbms.Compiler.doCompile(Compiler.java:663) 

Line: 0 

#13#10Error: at oracle.aurora.rdbms.Compiler.access$000(Compiler.java:57) 

Line: 0 

#13#10Error: at oracle.aurora.rdbms.Compiler$1.run(Compiler.java:319) 

Line: 0 

#13#10Error: at java.security.AccessController.doPrivileged(Native Method) 

Line: 0 

#13#10Error: at oracle.aurora.rdbms.Compiler.compile(Compiler.java:317) 

Line: 0 
+0

データベースに付属のJavaのバージョンでコンパイルしてみてください。私が知る限り、Oracleは依然としてJava 1.5しかサポートしていません。 – RealSkeptic

+0

ありがとう、私はデータベース内でコンパイルしています。 Oracle Database 12c Release 2(12.2.0.1)は、Java 8のサポートを提供しています。 – Rene

+0

これはOracle 12.1で正常にコンパイルされます。Javaのバージョンを確認することはできますか?1.6 'SELECT dbms_java.get_ojvm_property(PROPSTRING => 'java.version')FROM dual; ' –

答えて

1

は、サーバー側のSQLJがもはやオラクル12.2でサポートされていることが判明していません。コードを少し書き直してやってみた。

create or replace and compile java source named "DirList" as 

import java.io.*; 
import java.sql.*; 

public class ChpDirList { 

public static void getList(String directory) 
throws SQLException { 

    Connection conn = DriverManager.getConnection("jdbc:default:connection:"); 
    String sql = "INSERT INTO NGM_DIR_LIST (file_name, file_length, file_type) values (?,?,?)"; 

    File path = new File(directory); 
    String[] list = path.list(); 
    String element; 

    for (int i = 0; i < list.length; i++) { 

    element = list[i]; 


    String fpath = directory + "/" + list[i]; 

    File f = new File(fpath); 

    long len; 

    String ftype; 


    if (f.isFile()) { 

    len = f.length(); 
    ftype = "F"; 

    } else { 

    len = 0; 
    ftype = "D"; 
    } 

    PreparedStatement pstmt = conn.prepareStatement(sql); 
    pstmt.setString(1, element); 
    pstmt.setLong(2, len); 
    pstmt.setString(3, ftype); 

    pstmt.executeUpdate(); 
    pstmt.close(); 
    } 
} 
} 
関連する問題