使用 RMySQL 创建存储过程
Create a stored procedure using RMySQL
背景: 我正在开发一个 rscript,它从 mysql 数据库中提取数据,执行逻辑回归,然后将预测插入回数据库中。我希望整个系统都包含在脚本中,以防数据库出现故障。这包括脚本在后端聚合数据所依赖的所有 mysql 存储过程,因为这些存储过程将在此类数据库故障中被删除。
问题:我在从 R 脚本创建存储过程时遇到问题。我是运行以下的人:
mySQLDriver <- dbDriver("MySQL")
connect <- dbConnect(mySQLDriver, group = connection)
query <-
"
DROP PROCEDURE IF EXISTS Test.Tester;
DELIMITER //
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
END //
DELIMITER ;
"
sendQuery <- dbSendQuery(connect, query)
dbClearResult(dbListResults(connect)[[1]])
dbDisconnect(connect)
但是我收到以下错误,似乎涉及 DELIMITER 更改。
Error in .local(conn, statement, ...) :
could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
EN' at line 2
我所做的:我花了很多时间寻找答案,但一无所获。我错过了什么?
只是想跟进这串评论。感谢您对这个问题的看法。我有几个 Python 脚本需要具有此功能,我开始研究 Python 的相同主题。我发现 this question 表示答案。问题指出:
"DELIMITER 命令是 MySQL shell 客户端内置命令,它只能被该程序(和 MySQL 查询浏览器)识别。如果您通过 API.
直接执行 SQL 语句
当 CREATE FUNCTION 语句本身可以包含分号字符时,DELIMITER 的目的是帮助您避免对 CREATE FUNCTION 语句的终止产生歧义。这在 shell 客户端中很重要,默认情况下分号终止 SQL 语句。您需要将语句终止符设置为其他字符才能提交函数(或触发器或过程)的主体。"
因此下面的代码将 运行 在 R:
mySQLDriver <- dbDriver("MySQL")
connect <- dbConnect(mySQLDriver, group = connection)
query <-
"
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
END
"
sendQuery <- dbSendQuery(connect, query)
dbClearResult(dbListResults(connect)[[1]])
dbDisconnect(connect)
背景: 我正在开发一个 rscript,它从 mysql 数据库中提取数据,执行逻辑回归,然后将预测插入回数据库中。我希望整个系统都包含在脚本中,以防数据库出现故障。这包括脚本在后端聚合数据所依赖的所有 mysql 存储过程,因为这些存储过程将在此类数据库故障中被删除。
问题:我在从 R 脚本创建存储过程时遇到问题。我是运行以下的人:
mySQLDriver <- dbDriver("MySQL")
connect <- dbConnect(mySQLDriver, group = connection)
query <-
"
DROP PROCEDURE IF EXISTS Test.Tester;
DELIMITER //
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
END //
DELIMITER ;
"
sendQuery <- dbSendQuery(connect, query)
dbClearResult(dbListResults(connect)[[1]])
dbDisconnect(connect)
但是我收到以下错误,似乎涉及 DELIMITER 更改。
Error in .local(conn, statement, ...) :
could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
EN' at line 2
我所做的:我花了很多时间寻找答案,但一无所获。我错过了什么?
只是想跟进这串评论。感谢您对这个问题的看法。我有几个 Python 脚本需要具有此功能,我开始研究 Python 的相同主题。我发现 this question 表示答案。问题指出:
"DELIMITER 命令是 MySQL shell 客户端内置命令,它只能被该程序(和 MySQL 查询浏览器)识别。如果您通过 API.
直接执行 SQL 语句当 CREATE FUNCTION 语句本身可以包含分号字符时,DELIMITER 的目的是帮助您避免对 CREATE FUNCTION 语句的终止产生歧义。这在 shell 客户端中很重要,默认情况下分号终止 SQL 语句。您需要将语句终止符设置为其他字符才能提交函数(或触发器或过程)的主体。"
因此下面的代码将 运行 在 R:
mySQLDriver <- dbDriver("MySQL")
connect <- dbConnect(mySQLDriver, group = connection)
query <-
"
CREATE PROCEDURE Test.Tester()
BEGIN
/***DO DATA AGGREGATION***/
END
"
sendQuery <- dbSendQuery(connect, query)
dbClearResult(dbListResults(connect)[[1]])
dbDisconnect(connect)