gpt4 book ai didi

mysql - 如何将 shell 命令的结果分配给 MySQL 变量?

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

MySQL shell 中的 Shell 命令返回值:

mysql> \! echo 1
1

如何将这个结果赋值给MySQL变量?喜欢:

mysql> set @var = \! echo 1
1
-> ;

错误 1064 (42000):您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的 '' 附近使用的正确语法

最佳答案

问题是 SET 是一个服务器命令,它改变服务器上保存的变量的状态;而 system(及其 \! 简写)是一个客户端命令,它在客户端上派生一个进程。虽然客户端可以将 fork 进程的退出代码传输到服务器以存储在用户变量中,但我认为 MySQL 命令行客户端不提供此功能。

来自 mysql-5.5.29/client/mysql.cc :

3958: static int
3959: com_shell(String *buffer __attribute__((unused)),
3960: char *line __attribute__((unused)))
3961: {
3962: char *shell_cmd;
3963:
3964: /* Skip space from line begin */
3965: while (my_isspace(charset_info, *line))
3966: line++;
3967: if (!(shell_cmd = strchr(line, ' ')))
3968: {
3969: put_info("Usage: \\! shell-command", INFO_ERROR);
3970: return -1;
3971: }
3972: /*
3973: The output of the shell command does not
3974: get directed to the pager or the outfile
3975: */
3976: if (system(shell_cmd) == -1)
3977: {
3978: put_info(strerror(errno), INFO_ERROR, errno);
3979: return -1;
3980: }
3981: return 0;
3982: }

请特别注意 system(3) 调用的返回值没有存储在任何地方;但是,如果进程以该代码退出,则 com_shell() 函数调用将返回 -1

关于mysql - 如何将 shell 命令的结果分配给 MySQL 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14397393/

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