首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql批量linux编程

问mysql批量linux编程
EN

Stack Overflow用户
提问于 2013-09-12 13:20:24
回答 2查看 118关注 0票数 0

我有一个名为my_table的表,它包含hash_value、file_name、file_contents和id的行。

我有一个程序接受来自用户的哈希值。

我希望得到这个值,并创建一个mysql批处理,将文件转储到file_name。

我可以创建一个批处理来转储文件内容。

代码语言:javascript
复制
SELECT file_contents INTO DUMPFILE 'myfilename' FROM my_table WHERE hash_value='myhashvalue';

但是,我还没有找到一种方法首先获得file_name并在命令中使用该方法。我还想让我的程序知道批处理是否失败,以及原因(表、文件中没有这样的散列,等等)。

伪码

代码语言:javascript
复制
@file_name = SELECT file_name FROM my_table WHERE hash_value='myhashvalue';
if @file_name is not empty
    SELECT file_contents INTO DUMPFILE @file_name FROM my_table WHERE hash_value='myhashvalue';
    // if file exists already then the error gets sent to stdout so I can determine that
else
    echo something to stdout so I know the user entered a value not in the table
endif

我正在以如下方式运行这批

代码语言:javascript
复制
mysql -h localhost -u theuser -pthepassword mydatabase < mybatch.sql

谢谢

编辑:,我越来越近了。我可以使用

SELECT @filename:=file_name FROM my_table WHERE hash_value='myhahsvalue';

但是,在我的下一个语句SELECT file_contents INTO DUMPFILE @filename FROM my_table WHERE hash_value='myhashvalue';中尝试使用它时,会出现一个错误。

结果在中,您的SQL语法出现了错误;

编辑2:我现在可以使用它获得文件名(如果基于哈希而存在的话)。我仍在处理错误报告部分,但效果很好。

代码语言:javascript
复制
SELECT @filename:=file_name FROM my_table WHERE hash_value='myhashvalue';
SET @query:=CONCAT("SELECT file_contents INTO DUMPFILE '",@filename,"' FROM mytable WHERE hash_value='myhashvalue'");
PREPARE stmt FROM @query;
EXECUTE stmt;
EN

回答 2

Stack Overflow用户

发布于 2013-09-13 11:57:14

我不是“最好”的解决方案,只是添加了--详细的,然后在最后2>&1将stderr重定向到stdout。然后可以解析错误代码的文本。如果输入了无效的散列,则mysql在执行错误1086 (如果该文件已经存在)上失败--谢谢查找

票数 0
EN

Stack Overflow用户

发布于 2013-09-13 12:40:06

我有一个程序接受来自用户的哈希值。

你为什么不简单地修改这个程序来调用SQL呢?如果它所做的只是读取一个值,那么它有什么用处呢?

使用mysql过程读取文件名,将其分配给一个变量,并导入查询:

代码语言:javascript
复制
CREATE PROCEDURE extract (IN hash_in VARCHAR(100))
DETERMINISTIC
BEGIN
   DECLARE fname VARCHAR(100);
   SELECT file_name INTO fname FROM my_table WHERE hash_value=hash_in LIMIT 0,1;
   SELECT file_contents 
     INTO DUMPFILE fname 
     FROM my_table WHERE hash_value=hash_in;
END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18765511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档