...
 
Commits (4)
    https://gitcode.net/s0611163/Dapper.Lite/-/commit/ec8e6501e19ef761c34d98e89937c136c3533a96 IDbSession接口增加SetCommandType方法,以支持调用存储过程; 删除多余的OnExecuting调用; 2023-12-08T14:36:14+08:00 suxiang 651029594@qq.com https://gitcode.net/s0611163/Dapper.Lite/-/commit/472b7e0b74d2c0ba19e7ea644693347e9ed20a92 IDbSession接口增加设置Dapper参数的方法SetCommandTimeout和SetBuffered 2023-12-08T14:43:09+08:00 suxiang 651029594@qq.com https://gitcode.net/s0611163/Dapper.Lite/-/commit/c95e2a899e35bf8ecc05f433de84134604e95adf IDbSession接口新增查询并返回DataTable的方法 2023-12-08T15:41:05+08:00 suxiang 651029594@qq.com https://gitcode.net/s0611163/Dapper.Lite/-/commit/92f991a3fd5cb9683b80e8bdef301e6beb7fa56d v2.0.8 2023-12-08T15:46:47+08:00 suxiang 651029594@qq.com
......@@ -6,9 +6,9 @@
<Nullable>disable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<Title>Dapper.Lite</Title>
<AssemblyVersion>2.0.7</AssemblyVersion>
<FileVersion>2.0.7</FileVersion>
<Version>2.0.7</Version>
<AssemblyVersion>2.0.8</AssemblyVersion>
<FileVersion>2.0.8</FileVersion>
<Version>2.0.8</Version>
<PackageId>Dapper.Lite</PackageId>
<PackageProjectUrl>https://github.com/0611163/Dapper.Lite</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
......@@ -20,7 +20,10 @@
</Description>
<PackageReleaseNotes>
更新内容:
1. 移除接口的where T : new()限制,以支持QueryList<string>
1. 新增:IDbSession接口增加SetCommandType方法,以支持调用存储过程
2. 优化:删除重复的OnExecuting调用
3. 新增:IDbSession接口新增查询并返回DataTable的方法
4. 新增:IDbSession接口增加设置Dapper参数的方法SetCommandTimeout和SetBuffered
</PackageReleaseNotes>
</PropertyGroup>
......
......@@ -86,6 +86,12 @@ namespace Dapper.Lite
/// </summary>
public DbConnection Conn => _tran?.Connection;
private CommandType _commandType = CommandType.Text;
private int? _commandTimeout = null; // Dapper参数
private bool _buffered = true; // Dapper参数
#endregion
#region 静态构造函数
......@@ -254,5 +260,36 @@ namespace Dapper.Lite
}
#endregion
#region 设置CommandType
/// <summary>
/// 设置CommandType
/// </summary>
public IDbSession SetCommandType(CommandType commandType)
{
_commandType = commandType;
return this;
}
#endregion
#region Dapper参数设置
/// <summary>
/// 设置Dapper参数commandTimeout
/// </summary>
public IDbSession SetCommandTimeout(int? commandTimeout)
{
_commandTimeout = commandTimeout;
return this;
}
/// <summary>
/// 设置Dapper参数buffered
/// </summary>
public IDbSession SetBuffered(bool buffered)
{
_buffered = buffered;
return this;
}
#endregion
}
}
......@@ -47,8 +47,6 @@ namespace Dapper.Lite
Tuple<string, string> delTmpl = _provider.CreateDeleteSqlTempldate();
sbSql.Append(string.Format(delTmpl.Item1 + " {0} " + delTmpl.Item2 + " {1}={2}", GetTableName(_provider, type), idNameWithQuote, _provider.GetParameterName(idName, idType)));
OnExecuting?.Invoke(sbSql.ToString(), cmdParms);
return Execute(sbSql.ToString(), cmdParms);
}
#endregion
......@@ -90,8 +88,6 @@ namespace Dapper.Lite
Tuple<string, string> delTmpl = _provider.CreateDeleteSqlTempldate();
sbSql.Append(string.Format(delTmpl.Item1 + " {0} " + delTmpl.Item2 + " {1}={2}", GetTableName(_provider, type), idNameWithQuote, _provider.GetParameterName(idName, idType)));
OnExecuting?.Invoke(sbSql.ToString(), cmdParms);
return await ExecuteAsync(sbSql.ToString(), cmdParms);
}
#endregion
......@@ -122,8 +118,6 @@ namespace Dapper.Lite
sbSql.Remove(sbSql.Length - 1, 1);
sbSql.Append(")");
OnExecuting?.Invoke(sbSql.ToString(), cmdParms);
return Execute(sbSql.ToString(), cmdParms);
}
#endregion
......@@ -153,8 +147,6 @@ namespace Dapper.Lite
sbSql.Remove(sbSql.Length - 1, 1);
sbSql.Append(")");
OnExecuting?.Invoke(sbSql.ToString(), cmdParms);
return await ExecuteAsync(sbSql.ToString(), cmdParms);
}
#endregion
......@@ -200,8 +192,6 @@ namespace Dapper.Lite
Tuple<string, string> delTmpl = _provider.CreateDeleteSqlTempldate();
sbSql.Append(string.Format(delTmpl.Item1 + " {0} " + delTmpl.Item2 + " {1}", GetTableName(_provider, type), condition));
OnExecuting?.Invoke(sbSql.ToString(), null);
return Execute(sbSql.ToString());
}
#endregion
......@@ -219,8 +209,6 @@ namespace Dapper.Lite
Tuple<string, string> delTmpl = _provider.CreateDeleteSqlTempldate();
sbSql.Append(string.Format(delTmpl.Item1 + " {0} " + delTmpl.Item2 + " {1}", GetTableName(_provider, type), condition));
OnExecuting?.Invoke(sbSql.ToString(), null);
return await ExecuteAsync(sbSql.ToString());
}
#endregion
......@@ -265,8 +253,6 @@ namespace Dapper.Lite
Tuple<string, string> delTmpl = _provider.CreateDeleteSqlTempldate();
sbSql.Append(string.Format(delTmpl.Item1 + " {0} " + delTmpl.Item2 + " {1}", GetTableName(_provider, type), condition));
OnExecuting?.Invoke(sbSql.ToString(), cmdParms);
return Execute(sbSql.ToString(), cmdParms);
}
#endregion
......@@ -284,8 +270,6 @@ namespace Dapper.Lite
Tuple<string, string> delTmpl = _provider.CreateDeleteSqlTempldate();
sbSql.Append(string.Format(delTmpl.Item1 + " {0} " + delTmpl.Item2 + " {1}", GetTableName(_provider, type), condition));
OnExecuting?.Invoke(sbSql.ToString(), cmdParms);
return await ExecuteAsync(sbSql.ToString(), cmdParms);
}
#endregion
......
......@@ -28,7 +28,6 @@ namespace Dapper.Lite
public bool Exists(string sqlString)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, null);
object obj = ExecuteScalar(sqlString);
......@@ -50,7 +49,6 @@ namespace Dapper.Lite
public async Task<bool> ExistsAsync(string sqlString)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, null);
object obj = await ExecuteScalarAsync(sqlString);
......@@ -74,7 +72,6 @@ namespace Dapper.Lite
public T QuerySingle<T>(string sqlString)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, null);
object obj = ExecuteScalar(sqlString);
......@@ -97,7 +94,6 @@ namespace Dapper.Lite
public object QuerySingle(string sqlString)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, null);
object obj = ExecuteScalar(sqlString);
......@@ -120,7 +116,6 @@ namespace Dapper.Lite
public async Task<T> QuerySingleAsync<T>(string sqlString)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, null);
object obj = await ExecuteScalarAsync(sqlString);
......@@ -143,7 +138,6 @@ namespace Dapper.Lite
public async Task<object> QuerySingleAsync(string sqlString)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, null);
object obj = await ExecuteScalarAsync(sqlString);
......@@ -222,9 +216,6 @@ namespace Dapper.Lite
/// </summary>
public bool Exists(string sqlString, DbParameter[] cmdParms)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, cmdParms);
object obj = ExecuteScalar(sqlString, cmdParms);
if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
......@@ -244,9 +235,6 @@ namespace Dapper.Lite
/// </summary>
public async Task<bool> ExistsAsync(string sqlString, DbParameter[] cmdParms)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, cmdParms);
object obj = ExecuteScalarAsync(sqlString, cmdParms);
if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
......@@ -269,9 +257,6 @@ namespace Dapper.Lite
/// <param name="cmdParms">参数</param>
public T QuerySingle<T>(string sqlString, DbParameter[] cmdParms)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, cmdParms);
object obj = ExecuteScalar(sqlString, cmdParms);
if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
......@@ -293,9 +278,6 @@ namespace Dapper.Lite
/// <param name="cmdParms">参数</param>
public object QuerySingle(string sqlString, DbParameter[] cmdParms)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, cmdParms);
object obj = ExecuteScalar(sqlString, cmdParms);
if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
......@@ -317,9 +299,6 @@ namespace Dapper.Lite
/// <param name="cmdParms">参数</param>
public async Task<T> QuerySingleAsync<T>(string sqlString, DbParameter[] cmdParms)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, cmdParms);
object obj = await ExecuteScalarAsync(sqlString, cmdParms);
if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
......@@ -341,9 +320,6 @@ namespace Dapper.Lite
/// <param name="cmdParms">参数</param>
public async Task<object> QuerySingleAsync(string sqlString, DbParameter[] cmdParms)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, cmdParms);
object obj = await ExecuteScalarAsync(sqlString, cmdParms);
if (object.Equals(obj, null) || object.Equals(obj, DBNull.Value))
......@@ -537,11 +513,13 @@ namespace Dapper.Lite
#region ExecuteScalar
internal object ExecuteScalar(string sqlString, DbParameter[] cmdParms = null)
{
OnExecuting?.Invoke(sqlString, cmdParms);
var conn = GetConnection(_tran);
try
{
return conn.ExecuteScalar(sqlString, ToDynamicParameters(cmdParms), _tran);
return conn.ExecuteScalar(sqlString, ToDynamicParameters(cmdParms), _tran, _commandTimeout, _commandType);
}
finally
{
......@@ -556,11 +534,13 @@ namespace Dapper.Lite
#region ExecuteScalarAsync
internal async Task<object> ExecuteScalarAsync(string sqlString, DbParameter[] cmdParms = null)
{
OnExecuting?.Invoke(sqlString, cmdParms);
var conn = GetConnection(_tran);
try
{
return await conn.ExecuteScalarAsync(sqlString, ToDynamicParameters(cmdParms), _tran);
return await conn.ExecuteScalarAsync(sqlString, ToDynamicParameters(cmdParms), _tran, _commandTimeout, _commandType);
}
finally
{
......@@ -575,11 +555,13 @@ namespace Dapper.Lite
#region Execute
internal int Execute(string sqlString, DbParameter[] cmdParms = null)
{
OnExecuting?.Invoke(sqlString, cmdParms);
var conn = GetConnection(_tran);
try
{
return conn.Execute(sqlString, ToDynamicParameters(cmdParms), _tran);
return conn.Execute(sqlString, ToDynamicParameters(cmdParms), _tran, _commandTimeout, _commandType);
}
finally
{
......@@ -594,11 +576,124 @@ namespace Dapper.Lite
#region ExecuteAsync
internal async Task<int> ExecuteAsync(string sqlString, DbParameter[] cmdParms = null)
{
OnExecuting?.Invoke(sqlString, cmdParms);
var conn = GetConnection(_tran);
try
{
return await conn.ExecuteAsync(sqlString, ToDynamicParameters(cmdParms), _tran, _commandTimeout, _commandType);
}
finally
{
if (_tran == null)
{
if (conn.State != ConnectionState.Closed) conn.Close();
}
}
}
#endregion
#region 查询并返回DataTable
/// <summary>
/// 执行查询语句,返回DataTable
/// </summary>
public DataTable QueryDataTable(string sqlString)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, null);
var conn = GetConnection(_tran);
try
{
var reader = conn.ExecuteReader(sqlString, null, _tran, _commandTimeout, _commandType);
DataTable dt = new DataTable();
dt.Load(reader);
return dt;
}
finally
{
if (_tran == null)
{
if (conn.State != ConnectionState.Closed) conn.Close();
}
}
}
/// <summary>
/// 执行查询语句,返回DataTable
/// </summary>
public async Task<DataTable> QueryDataTableAsync(string sqlString)
{
SqlFilter(ref sqlString);
OnExecuting?.Invoke(sqlString, null);
var conn = GetConnection(_tran);
try
{
var reader = await conn.ExecuteReaderAsync(sqlString, null, _tran, _commandTimeout, _commandType);
DataTable dt = new DataTable();
dt.Load(reader);
return dt;
}
finally
{
if (_tran == null)
{
if (conn.State != ConnectionState.Closed) conn.Close();
}
}
}
/// <summary>
/// 执行查询语句,返回DataTable
/// </summary>
/// <param name="sqlString">查询语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>IDataReader</returns>
public DataTable QueryDataTable(string sqlString, DbParameter[] cmdParms)
{
OnExecuting?.Invoke(sqlString, cmdParms);
var conn = GetConnection(_tran);
try
{
var reader = conn.ExecuteReader(sqlString, ToDynamicParameters(cmdParms), _tran, _commandTimeout, _commandType);
DataTable dt = new DataTable();
dt.Load(reader);
return dt;
}
finally
{
if (_tran == null)
{
if (conn.State != ConnectionState.Closed) conn.Close();
}
}
}
/// <summary>
/// 执行查询语句,返回DataTable
/// </summary>
/// <param name="sqlString">查询语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>IDataReader</returns>
public async Task<DataTable> QueryDataTableAsync(string sqlString, DbParameter[] cmdParms)
{
OnExecuting?.Invoke(sqlString, cmdParms);
var conn = GetConnection(_tran);
try
{
return await conn.ExecuteAsync(sqlString, ToDynamicParameters(cmdParms), _tran);
var reader = await conn.ExecuteReaderAsync(sqlString, ToDynamicParameters(cmdParms), _tran, _commandTimeout, _commandType);
DataTable dt = new DataTable();
dt.Load(reader);
return dt;
}
finally
{
......
......@@ -212,7 +212,7 @@ namespace Dapper.Lite
try
{
return conn.QueryFirstOrDefault(type, sql, ToDynamicParameters(parameters), _tran);
return conn.QueryFirstOrDefault(type, sql, ToDynamicParameters(parameters), _tran, _commandTimeout, _commandType);
}
finally
{
......@@ -237,7 +237,7 @@ namespace Dapper.Lite
try
{
return await conn.QueryFirstOrDefaultAsync(type, sql, ToDynamicParameters(parameters), _tran);
return await conn.QueryFirstOrDefaultAsync(type, sql, ToDynamicParameters(parameters), _tran, _commandTimeout, _commandType);
}
finally
{
......
......@@ -26,7 +26,7 @@ namespace Dapper.Lite
try
{
return conn.Query<T>(sql, null, _tran).ToList();
return conn.Query<T>(sql, null, _tran, _buffered, _commandTimeout, _commandType).ToList();
}
finally
{
......@@ -52,7 +52,7 @@ namespace Dapper.Lite
try
{
return (await conn.QueryAsync<T>(sql, null, _tran)).ToList();
return (await conn.QueryAsync<T>(sql, null, _tran, _commandTimeout, _commandType)).ToList();
}
finally
{
......@@ -78,7 +78,7 @@ namespace Dapper.Lite
try
{
return conn.Query<T>(sql, ToDynamicParameters(cmdParms), _tran).ToList();
return conn.Query<T>(sql, ToDynamicParameters(cmdParms), _tran, _buffered, _commandTimeout, _commandType).ToList();
}
finally
{
......@@ -103,7 +103,7 @@ namespace Dapper.Lite
try
{
return (await conn.QueryAsync<T>(sql, ToDynamicParameters(cmdParms), _tran)).ToList();
return (await conn.QueryAsync<T>(sql, ToDynamicParameters(cmdParms), _tran, _commandTimeout, _commandType)).ToList();
}
finally
{
......
......@@ -24,8 +24,6 @@ namespace Dapper.Lite
PrepareInsertSql(obj, ref strSql, ref parameters);
OnExecuting?.Invoke(strSql.ToString(), parameters);
Execute(strSql.ToString(), parameters);
}
......@@ -40,8 +38,6 @@ namespace Dapper.Lite
PrepareInsertSql(obj, ref strSql, ref parameters);
strSql.Append(";" + selectIdSql + ";");
OnExecuting?.Invoke(strSql.ToString(), parameters);
object id = ExecuteScalar(strSql.ToString(), parameters);
return Convert.ToInt64(id);
}
......@@ -58,8 +54,6 @@ namespace Dapper.Lite
PrepareInsertSql(obj, ref strSql, ref parameters);
OnExecuting?.Invoke(strSql.ToString(), parameters);
await ExecuteAsync(strSql.ToString(), parameters);
}
......@@ -74,8 +68,6 @@ namespace Dapper.Lite
PrepareInsertSql(obj, ref strSql, ref parameters);
strSql.Append(";" + selectIdSql + ";");
OnExecuting?.Invoke(strSql.ToString(), parameters);
object id = await ExecuteScalarAsync(strSql.ToString(), parameters);
return Convert.ToInt64(id);
}
......@@ -105,8 +97,6 @@ namespace Dapper.Lite
PrepareInsertSql<T>(listPage, ref strSql, ref parameters, ref savedCount);
OnExecuting?.Invoke(strSql.ToString(), parameters);
Execute(strSql.ToString(), parameters);
}
}
......@@ -136,8 +126,6 @@ namespace Dapper.Lite
PrepareInsertSql<T>(listPage, ref strSql, ref parameters, ref savedCount);
OnExecuting?.Invoke(strSql.ToString(), parameters);
await ExecuteAsync(strSql.ToString(), parameters);
}
}
......
......@@ -69,8 +69,6 @@ namespace Dapper.Lite
if (savedCount > 0)
{
OnExecuting?.Invoke(strSql.ToString(), parameters);
Execute(strSql.ToString(), parameters);
}
}
......@@ -93,8 +91,6 @@ namespace Dapper.Lite
if (savedCount > 0)
{
OnExecuting?.Invoke(strSql.ToString(), parameters);
await ExecuteAsync(strSql.ToString(), parameters);
}
}
......@@ -139,8 +135,6 @@ namespace Dapper.Lite
if (savedCount > 0)
{
OnExecuting?.Invoke(strSql.ToString(), parameters);
Execute(strSql.ToString(), parameters);
}
}
......@@ -186,8 +180,6 @@ namespace Dapper.Lite
if (savedCount > 0)
{
OnExecuting?.Invoke(strSql.ToString(), parameters);
await ExecuteAsync(strSql.ToString(), parameters);
}
}
......
......@@ -105,5 +105,24 @@ namespace Dapper.Lite
void SetTypeMap<T>();
#endregion
#region 设置CommandType
/// <summary>
/// 设置CommandType
/// </summary>
IDbSession SetCommandType(CommandType commandType);
#endregion
#region Dapper参数设置
/// <summary>
/// 设置Dapper参数commandTimeout
/// </summary>
IDbSession SetCommandTimeout(int? commandTimeout);
/// <summary>
/// 设置Dapper参数buffered
/// </summary>
IDbSession SetBuffered(bool buffered);
#endregion
}
}
......@@ -151,6 +151,34 @@ namespace Dapper.Lite
#endregion
#region 查询并返回DataTable
/// <summary>
/// 执行查询语句,返回DbDataReader
/// </summary>
DataTable QueryDataTable(string sqlString);
/// <summary>
/// 执行查询语句,返回DbDataReader
/// </summary>
Task<DataTable> QueryDataTableAsync(string sqlString);
/// <summary>
/// 执行查询语句,返回DbDataReader
/// </summary>
/// <param name="sqlString">查询语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>IDataReader</returns>
DataTable QueryDataTable(string sqlString, DbParameter[] cmdParms);
/// <summary>
/// 执行查询语句,返回DbDataReader
/// </summary>
/// <param name="sqlString">查询语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>IDataReader</returns>
Task<DataTable> QueryDataTableAsync(string sqlString, DbParameter[] cmdParms);
#endregion
#region SqlString
/// <summary>
......
......@@ -490,6 +490,17 @@ namespace Dapper.Lite
Dictionary<string, object> dict = new Dictionary<string, object>();
MatchCollection mc = _regex.Matches(sql);
int argIndex = 0;
if (isAnonymous && mc.Count == 0) //存储过程的情况
{
foreach (string name in anonymousValues.Keys)
{
object obj = anonymousValues[name];
dict.Add(name, obj);
}
return dict;
}
foreach (Match m in mc)
{
var oldSql = m.Value;
......@@ -519,6 +530,7 @@ namespace Dapper.Lite
sql = ReplaceSql(sql, oldSql, name, parameterType);
}
}
return dict;
}
#endregion
......
......@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using Dapper.Lite;
using Utils;
using System.Data;
namespace Dapper.LiteTest
{
......@@ -446,5 +447,54 @@ namespace Dapper.LiteTest
}
#endregion
#region 测试调用存储过程
[TestMethod]
public void TestStoredProcedure()
{
var session = DapperLiteFactory.GetSession();
session.OnExecuting = (s, p) =>
{
Console.WriteLine(s);
};
List<dynamic> list = session.SetCommandType(CommandType.StoredProcedure).Sql("query_user", new { maxId = 20 }).ToList<dynamic>();
foreach (var item in list)
{
Console.WriteLine($"{item.user_name}, {item.real_name}, {item.remark}");
}
Assert.IsTrue(list.Count > 0);
list = session.SetCommandType(CommandType.Text).Sql("select user_name, real_name, remark from sys_user where id<=@Id", 20).ToList<dynamic>();
Assert.IsTrue(list.Count > 0);
}
#endregion
#region 测试查询并返回DataTable
[TestMethod]
public void TestReturnDataTable()
{
var session = DapperLiteFactory.GetSession();
session.OnExecuting = (s, p) =>
{
Console.WriteLine(s);
};
var sql = session.Sql("select * from sys_user where id<=@Id", 20);
DataTable dt = session.QueryDataTable(sql.SQL, sql.Params);
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine($"{dr["user_name"]}, {dr["real_name"]}, {dr["remark"]}");
}
Assert.IsTrue(dt.Rows.Count > 0);
var list = sql.ToList<dynamic>();
Assert.IsTrue(list.Count > 0);
}
#endregion
}
}
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50728
Source Host : localhost:3306
Source Database : litesql_test
Target Server Type : MYSQL
Target Server Version : 50728
File Encoding : 65001
Date: 2023-12-08 13:30:02
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Procedure structure for `query_user`
-- ----------------------------
DROP PROCEDURE IF EXISTS `query_user`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `query_user`(in maxId BIGINT)
BEGIN
SELECT * from sys_user where id<=maxId;
END
;;
DELIMITER ;