Skip to content

ExecuteSQL

根据选择的数据库资源执行SQL语句,返回执行结果。

业务属性

属性含义说明输入限定示例
enable是否启用该控件,未启用时不编译是否编译选择值启用
name控件名称控件输出值变量名常量dataList
text与控件关联的文本设计页控件显示常量queryData
dsn数据库资源可选已在资源配置中配置的关系型数据库资源
目前支持的数据库:MySQLORACLESqlServer
选择值dsn1
sqlMethodSQL方法SQL的执行方法:
单个查询:查询单行数据,获得单个实体
链表查询:查询多行数据,获得链表
分页查询:通过分页参数进行分页查询
存储过程:执行存储过程
更新-删除:执行数据变更操作:增删改,获得影响行数
选择值链表查询
sqlSQL语句执行的SQL语句常量,sql中可用sqlParam的参数值/流程变量#{sql}
sqlParamSQL参数sql中使用的参数key常量
value常量/流程变量
keya
value#{a}
pageNo分页页码sqlMethod分页查询时可设置
默认为1
常量/流程变量2
pageSize分页大小sqlMethod分页查询时可设置
默认为30
常量/流程变量#{pageSize}
throwable发生异常时中断请求启用:控件执行异常时立即中断请求,并返回错误
禁用:控件执行异常时将被忽略,并继续执行其后的流程
选择值启用
  1. 分页参数pageNo、pageSize 输入说明

    • 输入为流程变量时,变量必须为numberstring类型(Lua类型)的数值,且不可为nil 变量

    • 输入为常量时,必须为一个数值

    • 输入数值带小数时,小数部分会被截取

    • 输入为空时,pageNo默认为 1pageSize默认为15

  2. sqlParam使用说明 sqlParam的作用为sql执行时替换参数为具体值,配置参数的方式执行sql语句可防止sql注入式攻击 sql中参数的使用依赖sqlParam,而sqlParam依赖流程中的变量,请严格遵守其中的依赖关系,不要在sql语句中直接引用流程中的变量

    在Sql中以下面的格式使用的变量,必须在sqlParam中有定义,否则抛出异常。

    :p :作为占位符,在执行sql时传入配置值作为参数的替换。

    使用方法如:

    • 等值比较select * from table where id=:pid

    • 模糊匹配

      Oracleselect * from table where name like '%'||:pname||'%'

      SqlServerselect * from table where name like '%'+:pname+'%'

      MySqlselect * from table where name like CONCAT('%',:pname,'%')

    ⚠️注意:sql Server数据库执行sql时,每个参数只允许被使用一次。如select * from table where id=:id or id1=:id是不合法的。

    例:
    sqlParam: p1="1"
    sql: select t.* from tableName where t.column1=:p1
    执行语句为:select t.* from tableName where t.column1=? (执行时p1作为变量替换?)
    例:
    sqlParam: p1="1"
    sql: select t.* from tableName where t.column1=:p1
    执行语句为:select t.* from tableName where t.column1=? (执行时p1作为变量替换?)

    :{join(p)} :输入参数p为数组,数组中元素作为占位符应用于sql 的 in () 语句中

    例:
    sqlParam: p1= {"v1","v2"}
    sql: select t.* from tableName t where t.column1 in (:{join(p)})
    执行语句为:select t.* from tableName t where t.column1 in (?,?)  (执行时p1中的元素逐一作为变量替换 ?)
    例:
    sqlParam: p1= {"v1","v2"}
    sql: select t.* from tableName t where t.column1 in (:{join(p)})
    执行语句为:select t.* from tableName t where t.column1 in (?,?)  (执行时p1中的元素逐一作为变量替换 ?)

输出值

控件输出以控件属性name为名称的实体,该实体包含代表执行结果的属性result。result根据sqlMethod设置的sql方法的不同而不同,以下为不同执行结果result的类型、结构说明:

以下类型均为Lua类型

  • 单个查询resulttable类型(当查询没有结果行时为空table),查询结果表的列作为result的属性。

    当sql的查询结果有多行时,只返回第一行数据。

    *result属性的Json格式数据结构为:

    json
    {
        "result":{"column1":"a","column2":1,...}
    }
    {
        "result":{"column1":"a","column2":1,...}
    }
  • 链表查询resulttable类型的链表(当查询没有结果行时为空table),查询结果表的每一行视为链表的一个元素,每一列作为该链表元素的一个属性。

    *result属性的Json格式数据结构为:

    json
    {
        "result":[
            {"column1":"a","column2":1,...},
            {"column1":"a","column2":1,...},
         ...
     ]
    }
    {
        "result":[
            {"column1":"a","column2":1,...},
            {"column1":"a","column2":1,...},
         ...
     ]
    }
  • 分页查询result为一个二次封装的table类型的实体,其具有以下字段:

    • total:(类型:number)符合查询条件的数据总数。
    • rows:(类型:table)查询结果链表
    • pageNo:(类型:number)分页页码
    • pageSize:(类型:number)分页大小

    *result属性的Json格式数据结构为:

    json
    {
       "result": {
           "total": 100,
           "pageNo": 1,
           "pageSize": 5,
           "rows": [
               {"column1":"a","column2":1,...},
               {"column1":"a","column2":1,...},
               ...
           ]
       }
    }
    {
       "result": {
           "total": 100,
           "pageNo": 1,
           "pageSize": 5,
           "rows": [
               {"column1":"a","column2":1,...},
               {"column1":"a","column2":1,...},
               ...
           ]
       }
    }
  • 存储过程:返回查询结果链表。

    *result属性的Json格式数据结构为:

    json
    {
        "result":[
            {"column1":"a","column2":1,...},
            {"column1":"a","column2":1,...},
         ...
     ]
    }
    {
        "result":[
            {"column1":"a","column2":1,...},
            {"column1":"a","column2":1,...},
         ...
     ]
    }
  • 更新-删除resultnumber类型,数据改变行数。

    *result属性的Json格式数据结构为:

    json
    {
       "result": 10
    }
    {
       "result": 10
    }

⚠️注意:暂不可通过本控件查询获得OracleMySql数据库的BLOB类型数据

结果列-输出属性 转换:

sql方法为“查询” 时,查询结果表中的列转为对应实体的属性,列名即为属性名。sql查询表结果中应避免存在两个相同名称的列,否则在结果表转换为输出对象时其中一列将会被丢弃。

使用示例

假如我们有一表test_table,该表的数据如下:

idstatus
1001
2001

ExecuteSQL控件返回值命名为result,选择数据库资源test

img_16.png

单个查询

sqlMethod选择 单个查询

sql输入:

sql
select * from test_table where id = '100'
select * from test_table where id = '100'
img_17.png

使用输出控件输出查询结果:

data

json
{"data": "#{result}"}
{"data": "#{result}"}
img_18.png

使用curl请求接口:

$ curl http://localhost:6636/api/executeSql
$ curl http://localhost:6636/api/executeSql

接口返回:

json
{
    "data":
    {
        "result":
        {
            "status": "1",
            "id": "100"
        }
    }
}
{
    "data":
    {
        "result":
        {
            "status": "1",
            "id": "100"
        }
    }
}

查询

sqlMethod选择 链表查询

sql输入:

sql
select * from test_table where status = '1'
select * from test_table where status = '1'
img_19.png

使用curl请求接口:

$ curl http://localhost:6636/api/executeSql
$ curl http://localhost:6636/api/executeSql

接口返回:

json
{
    "data":
    {
        "result":
        [
            {
                "status": "1",
                "id": "100"
            },
            {
                "status": "1",
                "id": "200"
            }
        ]
    }
}
{
    "data":
    {
        "result":
        [
            {
                "status": "1",
                "id": "100"
            },
            {
                "status": "1",
                "id": "200"
            }
        ]
    }
}

分页查询

sqlMethod选择 分页查询

sql输入:

sql
select * from test_table where status = :sql_status
select * from test_table where status = :sql_status

配置sql参数

img_20.png

输入分页参数 #{body.pageNo}#{body.pageSize}

img_21.png

使用curl请求接口:

$ curl http://localhost:6636/api/executeSql -d "{\"status\":1, \"pageNo\":1, \"pageSize\":15}"
$ curl http://localhost:6636/api/executeSql -d "{\"status\":1, \"pageNo\":1, \"pageSize\":15}"

接口返回:

json
{
    "data":
    {
        "result":
        {
            "rows":
            [
                {
                    "status": "1",
                    "id": "100"
                },
                {
                    "status": "1",
                    "id": "200"
                }
            ],
            "pageSize": 15,
            "pageNo": 1,
            "total": 2
        }
    }
}
{
    "data":
    {
        "result":
        {
            "rows":
            [
                {
                    "status": "1",
                    "id": "100"
                },
                {
                    "status": "1",
                    "id": "200"
                }
            ],
            "pageSize": 15,
            "pageNo": 1,
            "total": 2
        }
    }
}

更新-删除

sqlMethod选择 更新-删除

sql输入:

sql
delete  from test_table where id = '100'
delete  from test_table where id = '100'
img_22.png

使用curl请求接口:

$ curl http://localhost:6636/api/executeSql
$ curl http://localhost:6636/api/executeSql

接口返回:

json
{
    "data":
    {
        "result": 1
    }
}
{
    "data":
    {
        "result": 1
    }
}