Skip to main content

ExecuteStoreProcedure

通过配置IN、OUT、IN/OUT参数配置,并使用Groovy SQL引擎调用数据库的存储过程。

IN和IN/OUT,须提供参数的值,同时支持表达式。

类型表

类型对应于Groovy的SQL参数类型(groovy.sql.Sql), 也是对应Java的SQL类型(java.sql.Types).

其中类型号,可能与Java SQL的类型号不同,比如BIT在Java中是-7, CLOB 为2005.

类型类型号对应Java对象说明
BIT0Boolean当不是1也不是t或true时,则返回false
BOOLEAN1Boolean布尔。非true,返回false
SMALLINT2Short短整型。非整数数字,解析将报错
INTEGER3Integer整型。非整数数字,解析将报错
BIGINT4Long长整型。非长整数数字,解析将报错
REAL5Float浮点数。非数字,解析报错
FLOAT6Double浮点数。非数字,解析报错
DOUBLE7Double双精度浮点数。 非数字,解析报错
DECIMAL8BigDecimal数字。 非数字,解析报错
NUMERIC9BigDecimal数字。 非数字,解析报错
DATE10java.sql.Date日期。根据参数的日期格式来格式化日期。&1
TIME11java.sql.Time时间。 根据参数的时间格式来格式化时间。&2
TIMESTAMP12java.sql.Timestamp时间戳. 根据参数的时间格式来格式化时间戳。&3
BINARY13java.io.ByteArrayInputStream二进制数据 &4
VARBINARY14java.io.ByteArrayInputStream可变长小二进制数据 &4
LONGVARBINARY15java.io.ByteArrayInputStream可变长大二进制数据 &4
CHAR16String字符。 不处理,直接使用字符串
VARCHAR17String字符串。 不处理,直接使用字符串
LONGVARCHAR18String长字符串。 不处理,直接使用字符串
CLOB19java.io.StringReader字符大对象。直接将字符串封装为字符串流
ARRAY20数组
BLOB21字节大对象
DATALINK22
DISTINCT23
JAVA_OBJECT24Java对象
NULL25
OTHER26其他
REF27
STRUCT28结构
TINYINT29Byte非整数数字,解析将报错
  • &1 如果没有设置日期格式,则先匹配参数设置值,如果是数字,则按毫秒数转换为日期;否则按默认日期格式yyyy-MM-dd格式解析为日期。如果设置了日期格式,则使用LocalDate来解析。
  • &2 如果没有设置时间格式,则先匹配参数设置值,如果是数字,则按毫秒数转换为时间;否则按默认时间格式HH:mm:ss.SSS格式解析。如果设置了时间格式,则使用LocalDateTime来解析。
  • &3 如果没有设置时间格式,则先匹配参数设置值,如果是数字,则按毫秒数转换为时间戳;否则按默认时间格式yyyy-MM-dd HH:mm:ss.SSS格式解析。如果设置了时间格式,则使用Date来解析。
  • &4 如果设置格式为base64, 则将字符串按BASE64解析为字节数组byte[]。如果设置hex,则字符串按16进制字符串解析为字节数组。如果没设置或设置为ascii,则字符串直接按ASCII编码获得字节数组。除此之外,将报错。

时间日期格式

当参数为时间或日期时,可自定义格式设置。

也可使用内置的格式:

名字匹配示例说明
BASIC_ISO_DATE20190319
ISO_LOCAL_DATE2019-03-19
ISO_OFFSET_DATE2019-03-19+10:00
ISO_DATE2019-03-19 或 2019-03-19+10:00自由匹配二种格式
ISO_LOCAL_TIME10:15 或 10:15:30自由匹配二种格式
ISO_OFFSET_TIME10:15+01:00 或 10:15:30+01:00自由匹配二种格式
ISO_TIME10:15 或 10:15:30 或 10:15:30+01:00自由匹配二种格式
ISO_LOCAL_DATE_TIME2019-03-19T10:15:30
ISO_OFFSET_DATE_TIME2019-03-19T10:15:30+01:00
ISO_ZONED_DATE_TIME2019-03-19T10:15:30+01:00[Asia/Shanghai]
ISO_DATE_TIME2019-03-19T10:15:30 或 2019-03-19T10:15:30+01:00 或 2019-03-19T10:15:30+01:00[Asia/Shanghai]自由匹配三种格式
ISO_ORDINAL_DATE2019-3372019年的第几天
ISO_WEEK_DATE2019-W48-62019年的第几周的星期几
ISO_INSTANT2019-03-19T10:15:30Z
RFC_1123_DATE_TIMETue, 3 Jun 2019 11:05:30 GMT

注意事项

  1. 目前已知的,由于Oracle原生不支持boolean类型,所以存储过程中也不会有boolean类型,通用的做法是number(1)和char(1)的方式来处理。