从Groovy执行PL / SQL块

时间:2016-05-25 19:01:21

标签: oracle jdbc groovy plsql

我需要帮助从groovy执行PL / SQL块。此PL / SQL块调用返回1或0的函数。

这是我在groovy中所拥有的:

import groovy.sql.*;

Integer jobId = 41481;
String url = "jdbc:oracle:thin:@hostname:1527:SID";
String username = "Will";
String password = "password";
String driverClassName = "oracle.jdbc.driver.OracleDriver";

def sql = Sql.newInstance(url, username, password, driverClassName);

sql.call("""DECLARE
  JOBID NUMBER;
  v_Return NUMBER;
BEGIN
  JOBID := $jobId;
  v_Return := CALL_FUNC1(
  JOBID => JOBID
 );
END;""");

运行此代码会出现以下错误:

 Caught: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at SQL.run(SQL.groovy:13)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

问题是此驱动程序不在类路径中。我们如何在groovy中设置类路径?

由于

2 个答案:

答案 0 :(得分:1)

groovy -cp" /path/to/your/driver/driver.jar" /path/to/your_script.groovy 或者您可以使用葡萄来管理依赖关系 - http://docs.groovy-lang.org/latest/html/documentation/grape.html

答案 1 :(得分:0)

为了加载类,JVM需要加载包含已编译类的jar。

系统中的某处应该有Oracle提供的jar,或者您可能需要下载它。将jar暴露在应用程序的类路径中。

Groovy允许您轻松地以编程方式加载jar,将其添加到顶部:

this.getClass().classLoader.rootLoader.addURL(new File("/path/to/OracleDriver.jar").toURL())

另一种方法是在从命令行调用时传递classpath jar:

groovy -cp /path/to/OracleDriver.jar yourScriptFile.groovy

如果您正在使用Intellij运行,请查看此处的文档以添加jar:https://www.jetbrains.com/help/idea/2016.1/dependencies-tab.html

你也可以注释你的类,groovy将下载必要的依赖项并加载它们:

@GrabResolver(name='oracle', root='http://maven.oracle.com', m2Compatible='true')
@Grab('com.oracle:ojdbc14:10.2.0.3.0'') //this needs to be your specific driver