Skip to content

脚本使用手册 - 函数

函数

下面是支持的函数列表

LENGTH

GET

XML_OPEN

从XML文件实例化

w:xml_open (file_name)

从XML内容实例化

w:xml_open (content, "CONTENTS")

XML_FETCH

XML_ENCODE

XML_DECODE

XPATH

XML的XPATH解析

<Return> = XPATH(<XmlNode>, <XPath>, <ReturnType>, <Candidate>, <DefaultValue>)

名称类型位置是否必须默认值描述
参数XmlNodeXML Object0必须XML 对象
参数XPathString1必须XPath表达式
参数ReturnTypeString2可选STRING返回类型
可选值:
NUMBER
STRING, BOOLEAN
NODESET
NODE
DECIMAL
参数CandidateString3可选候选XPath值
参数DefaultValueString4可选默认值
返回值返回值Object

获取单一值

w:set (po_number = xpath(xml_doc, "/WorkbookEntity/Sheets/Sheet/Cells/Cell[@loc='A2']/text()"))

获取列表

w:set (TS_ITEMS = xpath($xml_doc, $TS + "/NADLoop", "NODESET"))
w:for (TS_ITEM: $TS_ITEMS)
w:end

使用Type名称

w:set (quantity    = xpath(xml_doc, "/WorkbookEntity/Sheets/Sheet/Cells/Cell[@loc='D" + index + "']/text()", "STRING"  ))

NODE_TO_XML

XML_CLOSE

XML_TO_JSON

JSON_OPEN

JSON_FETCH

JSON_ENCODE

JSON_DECODE

JSON_PATH

JSON的XPATH解析

<Return> = JSON_PATH(<JSONNode>, <XPath>, <ReturnType>, <Candidate>, <DefaultValue>)

名称类型位置是否必须默认值描述
参数JSONNodeObject0必须JSON 对象
参数XPathString1必须XPath表达式
参数ReturnTypeString2可选STRING返回类型
可选值:
NUMBER
STRING, BOOLEAN
NODESET
NODE
DECIMAL
参数CandidateString3可选候选XPath值
参数DefaultValueString4可选默认值
返回值返回值Object

JSON_IS_ARRAY

NODE_TO_JSON

JSON_CLOSE

JSON_TO_XML

JSON_CHECK

CSV_OPEN

CSV_NEXT

CSV_CLOSE

CSV_READ

DB_LOAD

功能:加载外部JDBC驱动JAR文件 适用场景:需要动态加载数据库驱动JAR文件的场景

参数列表

参数名类型是否必填默认值说明
JDBCJarString-JDBC驱动JAR文件路径
DriverClassStringnullJDBC驱动类全名

返回值

返回值类型说明
Object返回加载的JDBC驱动对象

使用示例

// 示例1:加载外部的MySQL JDBC默认的驱动类(假设用户已经把jar文件上传到EDI_APP_DATA目录下)
w:expr (DB_LOAD((String)EDI_APP_DATA + "mysql-connector-java-8.0.28.jar"))

// 示例2:加载外部的Oracle JDBC指定的驱动类(假设用户已经把jar文件上传到EDI_APP_DATA目录下)
w:expr (DB_LOAD((String)EDI_APP_DATA + "lib/ojdbc10.jar", "oracle.jdbc.driver.OracleDriver"))

注意事项

  1. 加载驱动:函数已提前加载PostgreSQL, SQLServer和SQLite JDBC驱动,无须使用此方法来加载它们。
  2. 加载驱动类:驱动类可以不指定, 函数会自动地从指定的JDBC-jar中检索。

DB_CONN

功能:打开数据库连接,返回可操作的数据库连接对象。
适用场景:需要通过JDBC连接数据库的场景(如PostgreSQL, SQLServer, MySQL、Oracle等关系型数据库)。

参数列表

参数名类型是否必填默认值说明
ConnUrlString-JDBC连接URL(如:jdbc:mysql://localhost:3306/db)。
UserStringnull数据库用户名。
PasswordStringnull数据库密码。

返回值

返回值类型说明
Object返回已建立的数据库连接对象,可直接用于执行SQL操作。

使用示例

// 示例1:连接PostgreSQL数据库(无须提前加载驱动)
w:set (conn = DB_CONN("jdbc:postgresql://localhost:5432/mydb", "myUsername", "myPassword"))
    ...
w:expr (DB_CLOSE(conn))
// 示例2:连接MySQL数据库(须提前加载驱动,假设用户已经把jar文件上传到EDI_APP_DATA目录下)
w:expr (DB_LOAD((String)EDI_APP_DATA + "/lib/mysql-connector-java-8.0.28.jar"))
w:set (conn = DB_CONN("jdbc:mysql://localhost:3306/mydb", "myUsername", "myPassword"))
    ...
w:expr (DB_CLOSE(conn))

注意事项

  1. 资源释放:调用方需负责关闭连接,避免资源泄漏。

DB_STMT

功能:创建数据库语句对象,用于执行SQL查询
适用场景:需要通过连接对象创建Statement或PreparedStatement时使用

参数列表

参数名类型是否必填默认值说明
ConnObject-有效的数据库连接对象
SQLStringnull要预编译的SQL语句(不传则创建普通Statement)

返回值

返回值类型说明
Object返回Statement/PreparedStatement对象

使用示例

// 示例1:创建普通Statement
w:set (pstmt = DB_STMT(conn))
  ...
w:expr (DB_CLOSE(pstmt))

// 示例2:创建PreparedStatement
w:set (pstmt = DB_STMT(conn, "SELECT * FROM users WHERE id=?"))
  ...
w:expr (DB_CLOSE(pstmt))

注意事项

  1. 连接有效性:传入的连接对象必须处于打开状态
  2. SQL预编译:当提供SQL参数时会创建PreparedStatement
  3. 资源释放:调用方需负责关闭语句,避免资源泄漏。

DB_QUERY

功能:执行数据库查询并返回结果集
适用场景:需要通过Statement或PreparedStatement执行SQL查询并获取结果

参数列表

参数名类型是否必填默认值说明
StmtObject-有效的Statement/PreparedStatement对象
QueryStringnull要执行的SQL语句(动态SQL时使用)
ParamsArraynullSQL参数值数组(需与Query配合使用)

返回值

返回值类型说明
Object返回ResultSet结果集对象

使用示例

// 示例1:使用Statement执行查询
w:set (stmt = DB_STMT(conn))
w:set (rs = DB_QUERY(stmt, "SELECT * FROM users"))
  ...
w:expr (DB_CLOSE(rs))

// 示例2:使用PreparedStatement执行动态查询
w:set (pstmt = DB_STMT(conn, "SELECT * FROM users WHERE height > ? AND age > ?"))
w:set (rs = DB_QUERY(pstmt, null, [180, 18]))
  ...
w:expr (DB_CLOSE(rs))

注意事项

  1. 参数绑定:Params数组元素顺序必须与SQL中的?占位符对应
  2. 资源释放:调用方需负责关闭结果集,避免资源泄漏。

DB_CLOSE

功能:关闭数据库连接、语句或结果集对象,释放资源。
适用场景:需要手动释放JDBC资源(如Connection/Statement/ResultSet)的场景。

参数列表

参数名类型是否必填默认值说明
ObjectToCloseObject-需要被释放资源的对象。

返回值

返回值类型说明
Bool返回关闭操作结果(true=成功,false=失败)。

使用示例

// 示例1:关闭结果集对象
w:expr (DB_CLOSE(rs))

// 示例2:关闭语句对象
w:expr (DB_CLOSE(stmt))

// 示例3:关闭连接对象
w:expr (DB_CLOSE(conn))

注意事项

  1. 关闭顺序:推荐关闭顺序 ResultSet → Statement → Connection

RS_OPEN

功能:打开数据库连接并执行查询,返回结果集
适用场景:需要快速建立数据库连接并获取查询结果的场景

参数列表

参数名类型是否必填默认值说明
ConnUrlString-JDBC连接URL(如:jdbc:mysql://host:port/db
QueryString-要执行的SQL查询语句
ParamsArraynullSQL查询参数数组
UserStringnull数据库用户名
PasswordStringnull数据库密码

返回值

返回值类型说明
Object返回包含结果集的数据库上下文对象

使用示例

// 示例1:查询PostgreSQL数据库
w:set (context = RS_OPEN("jdbc:postgresql://localhost:3306/mydb", "SELECT * FROM products"))
    ...
w:expr (RS_CLOSE(context))

// 示例2:带参数查询PostgreSQL数据库
w:set (context = RS_OPEN("jdbc:postgresql://localhost:3306/mydb", "SELECT * FROM users WHERE height > ? AND age > ?", [180, 18]))
    ...
w:expr (RS_CLOSE(context))

// 示例3:查询指定的MySQL数据库(须提前加载驱动,假设用户已经把jar文件上传到EDI_APP_DATA目录下)
w:expr (DB_LOAD((String)EDI_APP_DATA + "/lib/mysql-connector-java-8.0.28.jar"))
w:set (context = RS_OPEN("jdbc:mysql://localhost:3306/mydb", "SELECT * FROM users WHERE height > ? AND age > ?", [180, 18], "myUsername", "myPassword"))
    ...
w:expr (RS_CLOSE(context))

注意事项

  1. 参数绑定:Params数组元素顺序必须与SQL中的?占位符对应
  2. 资源释放:调用方需负责关闭结果集,避免资源泄漏。

RS_NEXT

功能:移动结果集游标到下一行
适用场景:遍历数据库查询结果时使用

参数列表

参数名类型是否必填默认值说明
ResultSetOrContextObject-结果集对象或数据库上下文对象

返回值

返回值类型说明
Booltrue表示有下一行数据,false表示已到达结果集末尾

使用示例

// 示例1:基本用法
w:while (RS_NEXT(rs))
    ...
w:end

// 示例2:结合上下文对象使用
w:while (RS_NEXT(context))
    ...
w:end

注意事项

  1. 资源管理:不要在已关闭的结果集上调用。

RS_FETCH

功能:提取当前行的所有列值并转换为变量 适用场景:需要将整行数据快速映射到变量名的批量数据处理

参数列表

参数名类型是否必填默认值说明
ResultSetOrContextObject-结果集对象或数据库上下文对象

返回值

返回值类型说明
Booltrue表示成功提取并存在下一行,false表示结果集结束

使用示例

// 示例1:列值自动转为以下划线加上列名为名字的变量,如果列被指定了别名则是下划线加上列的别名
w:while(FUNC_RS_FETCH(rs))
    User Name is {{_username}}
    User Age is {{_age}}
w:end

注意事项

  1. 列名包含特殊字符:使用AS给列设置别名(如SELECT col AS my_col)
  2. 变量名冲突:通过列别名重命名
  3. 遇到特殊类型列:配合使用RS_GET来转换数据

RS_GET

功能:从数据库结果集中读取指定列的值
适用场景:需要从查询结果中提取特定列数据时使用

参数列表

参数名类型是否必填默认值说明
ContextObject-通过DB_OPEN获取的数据库上下文对象
ColumnObject-列索引(从1开始)或列名字符串
DataTypeStringVARCHAR指定返回值的JDBC数据类型
可选值:
VARCHAR,
BIT,
BOOLEAN,
TINYINT,
SMALLINT,
INTEGER,
BIGINT,
FLOAT,
REAL,
DOUBLE,
NUMERIC,
DECIMAL,
CHAR,
LONGVARCHAR,
DATE,
TIME,
TIMESTAMP

返回值

返回值类型说明
Object返回指定列的值

使用示例

// 示例1:按列名获取字符串值
name = RS_GET(ctx, "username", "VARCHAR")

// 示例2:按索引获取整数值
age = RS_GET(ctx, 2, "INTEGER")

// 示例3:获取日期值(使用默认VARCHAR类型)
date = RS_GET(ctx, "create_time")

注意事项

  1. 列指定方式:列索引从1开始;列名大小写敏感。
  2. 数据类型转换:类型不匹配会导致转换异常。

RS_CLOSE

功能:关闭由RS_OPEN函数返回的数据库上下文对象。
适用场景:需要手动释放数据库上下文资源的场景。

参数列表

参数名类型是否必填默认值说明
ObjectToCloseObject-需要被释放资源的对象。

返回值

返回值类型说明
Bool返回关闭操作结果(true=成功,false=失败)。

使用示例

// 示例1:关闭包含结果集的数据库上下文对象
w:expr (RS_CLOSE(context))

NOW

TIME_FORMAT

DATE

DATE_DIFF

DATE_FORMAT

DATETIME

DATETIME_DIFF

DATETIME_FORMAT

DATETIME_OFFSET

功能:对给定的时间戳(TIMESTAMP)进行年、月、日、时、分、秒的偏移计算,返回偏移后的新时间戳。
适用场景:需要动态调整日期时间的场景(如计算未来/过去的某个时间点)。

参数列表

参数名类型是否必填默认值说明
TIMESTAMPObject-原始时间戳(需能被解析为有效日期时间)。
YEAR_OFFSETLong0年偏移量(正数=未来,负数=过去)。
MONTH_OFFSETLong0月偏移量(支持跨年计算)。
DAY_OFFSETLong0日偏移量(支持跨月计算)。
HOUR_OFFSETLong0小时偏移量(支持跨日计算)。
MINUTE_OFFSETLong0分钟偏移量(支持跨小时计算)。
SECOND_OFFSETLong0秒偏移量(支持跨分钟计算)。

返回值

返回值类型说明
Object返回偏移后的时间戳对象,格式与输入一致。

使用示例

// 示例1:当前时间 + 1年2个月3天
DATETIME_OFFSET(NOW(), 1, 2, 3);

// 示例2:指定时间戳 - 5小时30分钟
DATETIME_OFFSET(NOW(), 0, 0, 0, -5, -30, 0);

注意事项

  1. 空偏移量:如果某个偏移量参数为 0 或未提供,则该维度不进行偏移。
  2. 边界处理:自动处理跨月、跨年等边界情况(如 MONTH_OFFSET=12 会自动进位为年)。
  3. 输入校验:若 TIMESTAMP 无法解析为有效时间,可能返回错误或 null

STRING_FORMAT

对字符串进行格式化

STRING_FORMAT(value, ...parameters)

  1. 对字符串前面补零
bash
w:set (NUM = 123)
w:set (FORMATTED_NUM = STRING_FORMAT("%10s", NUM))

STRING_LENGTH

STRING_INDEX_OF

STRING_SPLIT

STRING_SPLIT_WORD

STRING_SUBSTRING

STRING_TOUPPER

STRING_TOLOWER

STRING_REPLACE

STRING_TRIM

STRING_TRIM_START

STRING_TRIM_END

STRING_STRIP

STRING_DEFAULT

STRING_START_WITH

STRING_END_WITH

FILE_GETNAME

FILE_GETEXT

FILE_GETPATH

FILE_GETFOLDER

FILE_READ

GEN_SSCC

GEN_LABEL

MATH_CEIL

MATH_FLOOR

MATH_ROUND

NULL

SNOWFLAKE

LOG

DEBUG

DEFINE

AS_VALUE

使用名字获取变量的值,如果变量不存在使用默认值代替.

  1. 输入
W:SET (a = "abc")
W:SET (b = AS_VALUE(a, "a"))
Print {{b}}

输出

Print abc
  1. 输入
W:SET (b = AS_VALUE(a, "a"))
Print {{b}}

输出

Print a

CONVERT

转换类型

w:set (unit_cost    = CONVERT(unit_cost, "DECIMAL"))

转换类型 设定Culture

w:set (unit_cost    = CONVERT(unit_cost, "DECIMAL", "de_DE"))

COLUMN_INDEX

VALID_TYPE

是否变量的类型和验证类型一致

<Return> = VALID_TYPE(<VALUE>, <ReturnType>)

名称类型位置是否必须默认值描述
参数VALUEObject (JSON)0必须JSON 对象
参数验证类型String1必须STRING验证类型
可选值:
NUMBER
STRING, BOOLEAN
NODESET
NODE
DECIMAL
返回值返回值Bool
w:set (value = 123)
// Return False
w:set (valid = VALID_TYPE(value, "STRING"))

// Return True
w:set (valid = VALID_TYPE(value, "NUMBER"))

LOCK

UNLOCK

NODE_FETCH_CHILDREN_AS_VARIABLES

RS_FETCH_ROW_AS_VARIABLES

XMLPRC_AUTHENTICATION

XMLPRC_EXECUTE_KW

GEN_ID

生成序列化的ID字符串,默认会在每次调用时自增字符串,其中包含零字符 从1还是。

例如, 00001 --> 99999 --> 00001

名称类型位置是否必须默认值描述
参数PREFIXString0必须前缀字符
参数LENGTHInteger1必须字符串长度
参数PATTERNString2选填日期类型的格式,例如"yyMMdd"
参数RESET_BY_DAYBoolean3选填False是否按天重置开始值
返回值RESULTString返回字符串
// 第一次调用 1001
w:set (id = GEN_ID("1", 3))
// 第二次调用 10002
w:set (id = GEN_ID("1", 4))
// 包含日期 125060103
w:set (id = GEN_ID("1", 9, "yyMMdd"))
// 重置日期,第二天调用 125060201
w:set (id = GEN_ID("1", 9, "yyMMdd", true))