本手册下载

2.4使用SQL with Session

除了Session对象的简化X DevAPI语法之外,Session对象还有一个sql ()函数接受任何SQL语句作为字符串。

下面的示例使用Session调用特定节点上的SQL存储过程。

MySQL Shell JavaScript代码

Var mysqlx = require('mysqlx');//连接到服务器使用会话变量mySession = mysqlx.getSession('user:密码@localhost”);//切换到使用模式'test' mySession。sql(“使用测试”). execute ();//在Session上下文中,可以使用完整的SQL语言。sql("CREATE PROCEDURE my_add_one_procedure " + " (INOUT incr_param INT)+ "BEGIN " + " SET incr_param = incr_param + 1;"+“,”). execute ();mySession。sql("SET @my_var = ?;").bind(10).execute();mySession。sql(“叫my_add_one_procedure (@my_var);“). execute (); mySession.sql("DROP PROCEDURE my_add_one_procedure;").execute(); // Use an SQL query to get the result var myResult = mySession.sql("SELECT @my_var").execute(); // Gets the row and prints the first column var row = myResult.fetchOne(); print(row[0]); mySession.close();

MySQL Shell Python代码

mySession = mysqlx.get_session('user: ')密码@localhost') #切换到使用模式'test' mySession。sql("USE test").execute() #在Session上下文中可以使用完整的sql语言sql = """CREATE PROCEDURE my_add_one_procedure (INOUT incr_param INT) BEGIN SET incr_param = incr_param + 1;END """ myssession .sql(sql).execute() myssession .sql。sql("SET @my_var = ?").bind(10).execute() mySession. sql("SET @my_var = ?")sql(“叫my_add_one_procedure (@my_var)”). execute () mySession。sql("DROP PROCEDURE my_add_one_procedure").execute() #使用sql查询获取结果myResult = mySession. sql("DROP PROCEDURE my_add_one_procedure").execute()sql("SELECT @my_var").execute() #获取行并打印第一列row = myResult.fetch_one() print(row[0]) myssession .close()

node . js JavaScript代码

Var mysqlx = require('@mysql/xdevapi');var会话;mysqlx .getSession('user:password@localhost') .then(function (s) {Session = s;返回session.getSchema(测试);}) .然后(函数(){返回承诺。all([//切换到使用模式'test'会话。sql('USE test').execute(), //在Session上下文中可以使用完整的sql语言Session。sql('CREATE PROCEDURE my_add_one_procedure' + ' (INOUT incr_param INT)' + 'BEGIN ' + ' SET incr_param = incr_param + 1;' + 'END;').execute(),会话。executeSql('SET @my_var = ?;', 10).execute(),会话。sql('叫my_add_one_procedure (@my_var);“). execute(),会话。sql('DROP PROCEDURE my_add_one_procedure;').execute()])}) .then(function(){//使用sql查询获取结果返回会话。sql(“选择@my_var”)。execute(function (row) { // Print result console.log(row); }); });

c#代码

//使用Session var连接到服务器myssession = MySQLX.GetSession("server=localhost;port=33060;user=user;password=密码;“);//切换到使用模式"test" mySessionSQL(“使用测试”). execute ();//在Session上下文中,可以使用完整的SQL语言。SQL("CREATE PROCEDURE my_add_one_procedure " + " (INOUT incr_param INT)+ "BEGIN " + " SET incr_param = incr_param + 1;"+“,”). execute ();mySession。SQL("SET @my_var = 10;").Execute();mySession。SQL(“叫my_add_one_procedure (@my_var);“). execute (); mySession.SQL("DROP PROCEDURE my_add_one_procedure;").Execute(); // Use an SQL query to get the result var myResult = mySession.SQL("SELECT @my_var").Execute(); // Gets the row and prints the first column var row = myResult.FetchOne(); Console.WriteLine(row[0]); mySession.Close();

Python代码

#使用会话连接到服务器mySession = mysqlx.get_session('user:密码@localhost') #切换到使用模式'test' mySession。sql("USE test").execute() #在Session上下文中可以使用完整的sql语言sql = """CREATE PROCEDURE my_add_one_procedure (INOUT incr_param INT) BEGIN SET incr_param = incr_param + 1;END """ myssession .sql(sql).execute() myssession .sql。sql("SET @my_var = ?").bind(10).execute() mySession. sql("SET @my_var = ?")sql(“叫my_add_one_procedure (@my_var)”). execute () mySession。sql("DROP PROCEDURE my_add_one_procedure").execute() #使用sql查询获取结果myResult = mySession. sql("DROP PROCEDURE my_add_one_procedure").execute()sql("SELECT @my_var").execute() #获取行并打印第一列row = myResult.fetch_one() print(row[0]) myssession .close()

Java代码

进口com.mysql.cj.xdevapi。*;//连接到本地主机上的服务器Session myssession = new SessionFactory().getSession("mysqlx://localhost:33060/test?user=user&password=password");//切换到使用模式'test' mySession。sql(“使用测试”). execute ();//在Session上下文中,可以使用完整的SQL语言。sql("CREATE PROCEDURE my_add_one_procedure " + " (INOUT incr_param INT)+ "BEGIN " + " SET incr_param = incr_param + 1;"+ "结束"). execute ();mySession。sql("SET @my_var = ?").bind(10).execute();mySession。sql("CALL my_add_one_procedure(@my_var)").execute(); mySession.sql("DROP PROCEDURE my_add_one_procedure").execute(); // Use an SQL query to get the result SqlResult myResult = mySession.sql("SELECT @my_var").execute(); // Gets the row and prints the first column Row row = myResult.fetchOne(); System.out.println(row.getInt(0)); mySession.close();

c++代码

#include  // Connect to server on localhost string url = "mysqlx://localhost:33060/test?user=user&password=password";会话mySession (url);//切换到使用模式'test' mySession。sql(“使用测试”). execute ();//在Session上下文中,可以使用完整的SQL语言。sql("CREATE PROCEDURE my_add_one_procedure " (INOUT incr_param INT)" SET incr_param = incr_param + 1;"“,”). execute ();mySession。sql("SET @my_var = ?;").bind(10).execute();mySession。sql("CALL my_add_one_procedure(@my_var);").execute(); mySession.sql("DROP PROCEDURE my_add_one_procedure;").execute(); // Use an SQL query to get the result auto myResult = mySession.sql("SELECT @my_var").execute(); // Gets the row and prints the first column Row row = myResult.fetchOne(); cout << row[0] << endl;

当使用逐字/逐字SQL时,与在表和集合上使用DML和CRUD操作相比,通用的API模式基本相同。存在两个区别:设置当前模式和转义名称。