2

plsq からファイル ハンドルを取得しようとしています。Java から plsql パッケージをテストできるかどうかを確認しようとしています。次のコードがあります。

Properties props = Utils.readProps("database.properties");
    Connection con = DBManager.getConnection(props.getProperty("url"), props.getProperty("username"), props.getProperty("password"));
    Object file_type = new Object[3];
    STRUCT oracleRecord;
        try {
            //StructDescriptor fileType = StructDescriptor.createDescriptor("UTL_FILE.FILE_TYPE",con);
            CallableStatement stmt = con.prepareCall("{call simple_test.caller(?,?,?)");
            stmt.setObject(1, "/u01/home/oracle/EI/278");
            stmt.setObject(2, "ql_item_test.txt");
            stmt.registerOutParameter(3, OracleTypes.STRUCT, "UTL_FILE.FILE_TYPE");
            stmt.execute();
            oracleRecord = ((OracleCallableStatement)stmt).getSTRUCT(3);
            file_type = oracleRecord.getAttributes();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

そして、このplsqlコード:

PROCEDURE caller(file_path VARCHAR2,
                                         file_name VARCHAR2,
                                         fp        OUT UTL_FILE.file_type) IS
                maxLineSize INTEGER;
        BEGIN
                maxLineSize := 1024;
                fp          := UTL_FILE.FOPEN(file_path, file_name, 'R', maxLineSize);
        END;

しかし、私がそれを実行したとき、私はこのエラーを推測します:

java.sql.SQLException: invalid name pattern: UTL_FILE.FILE_TYPE

plsql 型を渡す/取得できないため、このエラーが発生しますか?

4

1 に答える 1

1

UTL_FILE.FILE_TYPE は PL/SQL の「レコード」であり、Oracle JDBC はレコードをサポートしていません。オブジェクトと、オブジェクトとプリミティブの特定のコレクションをサポートします。http://docs.oracle.com/cd/E11882_01/java.112/e16548/oraoor.htm http://docs.oracle.com/cd/E11882_01/java.112/e16548/oraarr.htm およびhttp : //docs.oracle.com/cd/E11882_01/java.112/e16548/oraoot.htm#i1078761

ところで、とにかくJavaでそれを使って何をするのかわかりません...

于 2013-08-22T20:41:33.930 に答える