【问题标题】:Pass parameters in a sql script via java通过java在sql脚本中传递参数
【发布时间】:2015-05-12 06:59:18
【问题描述】:

我有一个需要一些外部参数的 sqlplus 脚本。这些参数应该来自 java 代码中存在的数组。我想将这些值传递给 sql 脚本,但不知道如何。请指导我。

我的sqlplus文件如下图

SET ECHO OFF 
SET HEADING OFF 
SET FEEDBACK OFF 
SET VERIFY OFF 
SET DEFINE ON 
SET TRIMSPOOL ON 
SET NEWPAGE NONE 
SET TERMOUT OFF
spool &3/&2..&1..fn
select text
  from dba_source
 where name = '&2'
   and type = 'FUNCTION'
   and owner = '&1'
 order by line
/
spool off
exit;

我用于在 unix 服务器中执行此文件的 java 代码如下所示。

try {
            String line;
            Process p = Runtime.getRuntime().exec(
                    "sqlplus -L user/pwd@SID @" + sqlFilePath);
            BufferedReader input = new BufferedReader(new InputStreamReader(
                    p.getInputStream()));
            while ((line = input.readLine()) != null) {
                System.out.println(line);
            }
            input.close();
            p.destroy();
        } catch (Exception err) {
            err.printStackTrace();
        }

请指导我如何传递 java 代码中存在的字符串以在 unix 服务器中执行此 sqlplus 脚本。

编辑:我的解决方案

使用相同的查询创建了一个临时文件并替换了其中的参数。执行上述代码中的临时文件。

【问题讨论】:

  • 您是否考虑过从 Java 生成脚本?
  • 为什么要为此使用 Java?使用 Python 或 等解释型语言可能更容易,因为您使用的是 Unix,Bash 脚本。
  • 而不是直接运行 sqlplus,我会运行一个调用 sqlplus 的 shell 脚本plus(这样我可以有可变的组织)或者更好,我会做一个存储过程。
  • 实际上我有更大的要求,只能使用 java 来完成。这是我整个需求的一小部分。因此,我必须仅使用 java 执行此 sqlplus 脚本并从 java 传递参数。
  • @Drumnbass 谢谢你的建议。我创建了一个临时文件替换参数,它工作正常。

标签: java sqlplus


【解决方案1】:

尝试使用http://freemarker.org/ 之类的模板引擎。它非常通用,但应该不难使用。

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 2023-03-05
    • 1970-01-01
    • 2017-08-14
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    相关资源
    最近更新 更多