gpt4 book ai didi

Mysql:ER_PARSE_ERROR:从 Node js发送创建过程代码时

转载 作者:行者123 更新时间:2023-11-29 16:03:11 25 4
gpt4 key购买 nike

我正在尝试将创建过程查询从 Node js发送到MYSQL。我正在读取 Mysql.proc 表来获取存储过程定义。

从工作台或hedis等mysql客户端提交时,Mysql代码工作正常

从 NodeJS 提交代码时出现以下错误

{ Error: ER_PARSE_ERROR: 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 'CREATE PROCEDURE `qwe`.`USP_GET_ALL_STOCK_WITH_INDICATORS`( IN `IPV_DATE` DATE )' at line 1
.
.
.
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage:
'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 \'CREATE PROCEDURE `qwe`.`USP_GET_ALL_STOCK_WITH_INDICATORS`( IN `IPV_DATE` DATE )\' at line 1',
sqlState: '42000',
index: 0,
sql:
'USE qwe; CREATE PROCEDURE `qwe`.`USP_GET_ALL_STOCK_WITH_INDICATORS`( IN `IPV_DATE` DATE )BEGIN IF NOT EXISTS(SELECT 1 FROM StockCandle where `DATE`=IPV_DATE) THEN SET @D:=(SELECT MAX(`DATE`) FROM StockCandle); ELSE SET @D:=IPV_DATE; END IF; -- select @D; SELECT SM.Symbol, SM.MA13, SM.MA8, SM.MA5, CASE WHEN SM.MA5>SM.MA8 AND SM.MA8>MA13 THEN \'>>>\' WHEN SM.MA5<SM.MA8 AND SM.MA8<MA13 THEN \'<<<\' ELSE NULL
END ALLIGATOR ,SM.RSI, SM.BHAVTIME, SM.CANDLEINDICATOR FROM StockMaster SM where SM.DATE=@D; END // ' }

尝试下面的代码来解析 Node 中的sql

formattdSQL = formattdSQL.replace(/(?:\\[rtn]|[\r\t]+)+/g, ' ');

查询获取过程

SELECT `name`, CONVERT(param_list USING utf8), CONVERT(body USING utf8)
INTO @spname, @spparams, @spbody
FROM mysql.proc WHERE `name` = 'USP_GET_ALL_STOCK_WITH_INDICATORS' AND db = v_oldDB;
SET @sql = CONCAT(@sql, '\r\n', 'DELIMITER //','\r\n','CREATE PROCEDURE `', v_newDB, '`.`', @spname, '`(', @spparams,')',@spbody, ' //', '\r\n','');

我希望创建过程查询应该从 Node 成功执行

最佳答案

DELIMITER 指令不是 MySQL Server SQL 的一部分。仅与交互式客户端实用程序一起使用,这些实用程序将输入流或屏幕文本框的内容解析为单独的语句 - 例如工作台或(大概)“hedis”(无论是什么) 。

当您使用编程库发送查询时,您不会使用它。

只需将过程声明作为单个查询发送即可。在此之前,将 USE 语句作为单独的查询发送。

第一个查询:

USE qwe

(第一个查询中的尾随分号实际上不是服务器所期望的,但如果您发送它,则允许使用。)

第二个查询:

CREATE PROCEDURE ...
...
END

之前不应有 DELIMITER//,之后也不应有 //。这些都是客户端构造,对服务器没有意义。

无需使用 formattdSQL.replace(...) 语句来删除换行符。这只会让你的代码变得不可读,而且是不必要的。

关于Mysql:ER_PARSE_ERROR:从 Node js发送创建过程代码时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55981194/

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