您如何将 UTL_FILE.FILE_TYPE 作为输出参数

Posted

技术标签:

【中文标题】您如何将 UTL_FILE.FILE_TYPE 作为输出参数【英文标题】:How do you get the UTL_FILE.FILE_TYPE as an out parameter 【发布时间】:2013-06-25 17:29:33 【问题描述】:

我正在尝试从 plsq 获取文件句柄,我正在尝试查看是否可以测试 plsql 包 从 Java 我有这个代码:

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 类型?

【问题讨论】:

试试SYS.UTL_FILE.FILE_TYPE 我尝试了 SYS.UTL_FILE.FILE_TYPE 但我仍然遇到同样的错误。 UTL_FILE.FILE_TYPEUTL_FILE 内部使用的PL/SQL 记录结构。你想做什么?你的 Java 程序可以利用这个记录做什么? 我正在尝试测试一些具有 FILE_TYPE 输出/输入参数的自定义 PL/SQL 包。我正在使用 JUNIT 在 Java 上对此进行测试。我想知道我是否可以创建/检索此 PL/SQL 记录,但似乎我不能。 【参考方案1】:

UTL_FILE.FILE_TYPE 是一个 PL/SQL“记录”,Oracle JDBC 不支持记录。它确实支持对象以及某些对象和原语的集合。见http://docs.oracle.com/cd/E11882_01/java.112/e16548/oraoor.htmhttp://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 中用它做什么......

【讨论】:

以上是关于您如何将 UTL_FILE.FILE_TYPE 作为输出参数的主要内容,如果未能解决你的问题,请参考以下文章

如何让别名在所有 shell 中工作?

内核模块的加载如何在 linux 中工作?

依赖注入如何在 Cucumber 中工作?

如何让我的表单在 Django 中工作?

如何让 ScrollViewer 在 StackPanel 中工作?

如何使可编辑标签在kivy中工作