指令中的路径“CONCATE...PREPARE...EXECUTE...”

问题描述 投票:0回答:1

我的 MySQL 遇到问题。就上下文而言,我负责将公司的代码从 Oracle 迁移到 MySQL,并且我在宏变量方面遇到了很多问题:我找到的唯一解决方案是使用 concat,然后准备和执行,但这使我们失去了很多可读性...顺便说一句,如果您在这一点上有更好的选择,请不要犹豫!

话虽如此,一般来说,“连接...准备...执行”指令允许我做任何我想做的事情,除了翻译路径宏时...

当我想在源代码或 tee 中使用这些说明时,我收到错误消息,尽管进行了几周的搜索,但我找不到解决方案。有没有人有解决办法?

我在下面包含了一些代码示例

示例1:

我想要自动化 源//data_file/data_test/test_source_fic_a_import.sql; 当我像这样运行时不用担心,但是当我这样做时:

set @rep_ts := '//data_file/data_test/';
SET @req_test_source := CONCAT("source ", @rep_ts, "test_source_fic_a_import.sql ;");
PREPARE prepa_test_source FROM @req_test_source; EXECUTE prepa_test_source; DEALLOCATE PREPARE prepa_test_source;

我收到以下错误消息:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在附近使用的正确语法[...]

示例2:

我跑步的时候也是这样:

tee //data_file/data_test/test_tee.txt;
use basecommune;
select count(*)
from test_squelbyan;
notee

它有效,但是当我尝试时

set @rep_ts := '//data_file/data_test/';
SET @req_test_tee := CONCAT("tee ", @rep_ts, "test_tee.txt;");
PREPARE prepa_test_tee FROM @req_test_tee; EXECUTE prepa_test_tee; DEALLOCATE PREPARE prepa_test_tee;

我明白了:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'tee [...] 附近使用的正确语法

mysql path execute macro-variable
1个回答
0
投票

source

tee
是mysql客户端内置命令。请参阅
https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html

这些内置命令不能被 MySQL 的 SQL 解析器识别,并且它们不能由准备好的语句运行。

© www.soinside.com 2019 - 2024. All rights reserved.