我需要帮助从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中设置类路径?
由于
答案 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