gpt4 book ai didi

r - 使用 RMySQL 创建存储过程

转载 作者:行者123 更新时间:2023-12-04 04:17:36 27 4
gpt4 key购买 nike

背景: 我正在开发一个 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 语句,则不需要使用 DELIMITER。

当 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)

关于r - 使用 RMySQL 创建存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com