MariaDB社区

标题: 请教:把dos导出的文件名做为变量,传给mysql [打印本页]

作者: nyt    时间: 2012-5-11 20:30
标题: 请教:把dos导出的文件名做为变量,传给mysql
背景:R:\2012-04-19,R:\2012-04-20,这样的目录很多(一天一个目录,日期号为目录名),而且这样的目录下面也有很多sz000555.xls,sh60000.xls类似文件(前缀是股票代码)。

要求:把这些文件夹下的文件导入数据库。文件名为表名,如无则创建,文件夹名由“YYYY-MM-DD”变为“YYYYMMDD”做为rq字段的值。



进展:

一、现通过cmd的批处理模式下执行nyt.bat。

C:\Documents and Settings\Administrator>mysql -u root -p < nyt.bat



nyt.bat内容如下:

use stock;

CREATE TABLE sz000548
   (
   rq date not null,
   sj time not null,
   cjj decimal(8,2) unsigned not null,
   ss mediumint not null,
   bs char(1) not null,
   index (rq,cjj,bs)
);

load data infile 'R:/2012-04-19/sz000548.xls' into table sz000548   IGNORE 1 LINES  (sj, cjj,@dummy,ss,@dummy,bs) set rq = 201200419;


测试通过,可以建表,导入数据。

二、使用cmd命令,获取目录下的文件名

echo off &for /f "tokens=*" %i in ('dir/b/a') do echo %~ni >>files.txt

把所有文件名导出到了files.txt中。


下面一步怎么解决:

把导出的文件名做为变量,传给mysql。在建表、导入数据中使用?
作者: nyt    时间: 2012-5-14 16:04
主要是想遍历一个目录,把里面的文件导入到mysql中,文件名做表名,目录名做为表里的一个字段名。
但是不知道mysql如何获取这两个变量。

有高手没?
作者: admin    时间: 2012-5-14 17:30
目前,表名不能被参数化,用动态SQL可以解决,给你个例子照着写就可以了:
  1. USE `XXDB`$
  2. DROP PROCEDURE IF EXISTS `USP_LoadTableData`$
  3. CREATE DEFINER=`admin`@`%` PROCEDURE `USP_
  4. LoadTableData  `(v_TableName        VARCHAR(64))
  5. BEGIN
  6.         DECLARE v_stat VARCHAR(200);
  7.         SET @v_stat=CONCAT('select * from ',v_TableName);       
  8.         PREPARE SelectTableData FROM @v_stat;
  9.         EXECUTE SelectTableData;
  10.     END$
  11. DELIMITER ;
复制代码

作者: business124    时间: 2012-5-24 16:34
http://www.mysqlpub.com/thread-30998-1-1.html




欢迎光临 MariaDB社区 (http://123.56.88.72/) Powered by Discuz! X3.2