当前位置: 首页 > 知识库问答 >
问题:

无法加载类groovy.sql.sql

赫连鸿振
2023-03-14

我试图从groovy脚本调用Oracle存储过程,结果出现了标题中的错误。

以下是我的剧本:

import groovy.sql.Sql
import java.util.logging.*

Logger.getLogger('groovy.sql').level = Level.ALL

def dbUser = 'YOU'
def dbPassword = 'WILL'
def dbDriver = 'oracle.jdbc.driver.OracleDriver'
def dbURL = 'NEVER:KNOW'  

def query = Sql.newInstance(dbURL, dbUser, dbPassword, dbDriver)

def affiliateNumber = 18
def depositIdentifier = 55
def depositType = "00"
def depositAmount = 18.49
def depositCommunication = 135453
def d = new Date()
def depositDate = d.toTimestamp()
def criterium = 0

/*
sql.query('SELECT NO_AFF, DEN from AFF WHERE no_AFF = 4'){ resultSet ->
    while(resultSet.next()){
        println resultSet.getString('no_aff') + resultSet.getString('den')
    }
}
*/

query.call("CALL PAC_GCA_IMP_AUTO_2.IMP_AUTO(${affiliateNumber}, ${depositIdentifier}, ${depositType}, ${depositAmount}, ${depositCommunication}, ${depositDate}, ${criterium}, ?, ? )", [Sql.INTEGER, Sql.VARCHAR])

当我删除[sql.integer,sql.varchar](它们是OUT parameters)参数时,脚本将被编译,所以我认为它们有问题······

我找到了一个让我的程序工作的解决方案:

def returnCode = query.call("DECLARE v_sqlcode PLS_INTEGER; v_sqlerrm VARCHAR2(500); BEGIN PAC_GCA_IMP_AUTO_2.IMP_AUTO(?, ?, ?, ?, ?, ?, ?, v_sqlcode, v_sqlerrm); END;",
        [
                affiliateNumber,
                depositIdentifier,
                depositType,
                depositAmount,
                depositCommunication,
                depositDate,
                criterium
        ])

println "Groovy return = ${returnCode}"

但我想有一个更好的方法来传递这些SQL参数...

PS:我正在使用Groovy-2.4.13,并尝试了Oracle JDK9和1.8.0_151

共有1个答案

丌官凯康
2023-03-14

对于带有签名的过程

 procedure proc_x (a number, b number, ret out number )

这对我有用

def a = 100
def b = 50 
def res

db.call("""begin
 proc_x(${a},${b},${Sql.inout(Sql.INTEGER(res))});
end;""") {result -> println "result ${a} + ${b} = ${result}"}


result 100 + 50 = 150

不带inout的替代用法

db.call("""begin
 proc_x(${a},${b},${Sql.INTEGER});
end;""") {result -> println "result out ${a} + ${b} = ${result}"}

.

db.call("CALL proc_x(${a},${b},?)" , [Sql.INTEGER] ) 
    {result -> println "result out ${a} + ${b} = ${result}"}
 类似资料:
  • 问题内容: 当我尝试运行Hibernate时,我在控制台中收到以下消息。 但是hibernate状态很好。我的项目有什么问题吗?我使用Eclipse(Helios),Hibernate 3.6.8。我使用这些jar文件:antlr-2.7.6,commons- collections-3.1,dom4j-1.6.1,hibernate3,hibernate- jpa-2.0-api-1.0.1.F

  • 我正试图用PDFBox和Groovy来搞乱一下。我试图使用PDType1Font类的getStringWidth()方法计算字符串的宽度。 我的问题是,每次编译和运行代码时,都会出现这样一个错误: 代码如下: 为了清晰起见,我删除了代码中所有不相关的部分。 问题出在哪里? 更新:我在IntelliJ中搜索了一下如何将外部jar添加到我的类路径,发现我需要转到项目结构- 我试着这样做: 但我仍然收到

  • 我的系统中安装了JMeter 5.2.1。当我尝试执行下面的代码时,我遇到了这个错误。 响应消息:javax。剧本ScriptException:组织。科德豪斯。非常棒。控制MultipleComplationErrorsException:启动失败:类生成期间出现常规错误:java。lang.NoClassDefFoundError:无法加载类com。蔚蓝色的消息传递。事件中心。由于缺少依赖关系

  • 问题内容: 我正在使用 eclipse juno 使用 maven (m2eclipse插件)运行其他人的Java代码。但是我收到以下消息: 在官方网站上,我找到了针对此问题的以下修复程序: 所以我将slf4j-simple.jar复制到 “ C:\ Program Files \ Java \ jdk1.7.0_07 \ lib”中 。但是我仍然遇到错误。 请指导我什么是正确的解决方案。我是Ja

  • 问题内容: 异常堆栈跟踪 我的redirect.jsp文件内容 问题答案: 在servlet容器的掩护下,JSP在执行之前先编译为Java类。 例外 表示您的webcontent文件夹根目录中的文件无法编译,这通常意味着该文件在 scriptlet中 包含一些原始Java代码,这些代码包含语法错误。您需要修复这些语法错误,以便servlet容器可以编译那些JSP文件。但是,普遍的共识是, scri

  • 由于我升级到android studio 3.0.1,我无法继续使用我的应用程序。Gradle引发以下错误:Gradle同步问题 错误:无法加载类“groovy.lang.GroovyObject”。此意外错误的可能原因包括: 有什么建议吗?非常感谢你。