SQL 可以使用 INTO OUTFILE 选项将数据转储到文件中,例如
SELECT * from FIshReport INTO OUTFILE './FishyFile'
问题是,这个命令只有在文件之前不存在的情况下才被允许。它创建文件,然后输入数据。那么,有没有办法以这种方式将数据附加到文件中?
SQL 可以使用 INTO OUTFILE 选项将数据转储到文件中,例如
SELECT * from FIshReport INTO OUTFILE './FishyFile'
问题是,这个命令只有在文件之前不存在的情况下才被允许。它创建文件,然后输入数据。那么,有没有办法以这种方式将数据附加到文件中?
正如 SELECT 语法的 MySQL 页面所建议的那样:
http://dev.mysql.com/doc/refman/5.0/en/select.html
替代方法是从 MySQL 客户端发出 SELECT:
However, if the MySQL client software is installed on the remote machine,
you can instead use a client command such as mysql -e "SELECT ..." > file_name
to generate the file on the client host.
在您的情况下,将修改为:
mysql -e "SELECT * from FishReport" >> file_name
这样您只需附加到文件中。
从您的 Tcl 脚本中,您可以简单地将其作为 exec 命令发出:
我认为 MySQL 出于安全原因不允许将数据附加到现有文件或覆盖现有文件。解决方法可能是将结果保存在单独的文件中,然后附加使用文件 IO。
您始终可以使用将 SQL 脚本的输出附加到文件中>>
例如(对于 Sybase):
isql < script.sql >> outputfile.out
我不能告诉你 MySQL 的等价物是什么,但原理应该是一样的。
当然,输出将全部转到一个文件,因此如果您的 SQL 脚本将各种 SQL 选择输出到不同的输出文件,那么您需要拆分脚本。
您可以将其添加到变量中。然后使用带有 UNION 的 SELECT。
declare t varchar(100);
set @myvar = concat('
select * INTO OUTFILE \'',file,'\'
from (
select \'',t,'\'
union all
SELECT col from tbl where x
) a'
);
PREPARE stmt1 FROM @myvar;
EXECUTE stmt1;
Deallocate prepare stmt1;