2015-04-03 264 views
-3

我有一个名为query_master的表,它有4列,第4列有SQL查询作为值。总共有5个条目在查询表中。从shell脚本执行SQL

表结构:

S.No --> Key --> Title --> Query 
1  100  EG  select * from dual 

现在我的目标是,我要取使用shell脚本从query_master的SQL查询和执行它。每个SQL查询的输出应该写在一个单独的日志文件上,并且日志文件名应该等于标题的名称。

您可以请帮助实现这种情况下使用存储过程或存储的功能,这将对我更有帮助。

我需要使用shell脚本来实现这一点。

+3

什么数据库,这是一个解决方案?这项任务的具体部分是否需要帮助?向我们展示您迄今为止所做的以及您卡在哪里。 – 2015-04-03 18:55:21

回答

0

试试这个,假设你使用MySQL:

awk -F'\t' 'NR!=1 {system("mysql -u user -p -e " $4 " database")}' file 

如果文件是包含表的文件,用户是用户和数据库是数据库。或者设置这些作为变量,而不是硬编码他们是这样的:

awk -F'\t' -v db="database" -v user="user" 'NR!=1 {system(""mysql -u " user " -p -e " $4 " " db)}' file 
+0

嗨,约翰,这是只有oracle数据库..我已经创建了一个表,就像我之前说过的那个查询被执行。现在我的目标是,我必须使用mysql连接到Db并执行表中的每个查询。查询的输出应该写在相应的标题名称中。 – Anwar 2015-04-04 07:21:39

+0

我有这样的脚本,对于每一行,我将连接到数据库和输出,我将存储在一个日志文件中。但是,如果表项增加,我必须手动再次写入一个条目..取而代之的是无论如何要在一个块中执行完整的表查询,并且输出应该相应写入。我使用下面的查询。 Mysql -s user/pass @ dbname <> example.log。从query_master中选择查询,其中键为'1'; EOF – Anwar 2015-04-04 07:27:53

0

请接受来自命令行(或inputfile中或标准输入)SQL语句中的shell脚本,并做了所有的事情你喜欢出口ORACLE_HOME,TNSNAMES,用户名,密码,重定向输出,调用sqlplus,输出格式,删除列标题和其他sqlplus设置。

与您magicsql.sh(测试后),瞄准像

magicsql.sh "select key, query from query_master order by key" | while read key query; do 
    magicsql.sh "${query}" > /tmp/${key}.out 
done 
+0

所以,你的意思是创建一个函数并重复使用它。对? – Anwar 2015-04-04 18:57:58

+0

功能也是可能的。我的意思是你放置在PATH中的某个shellcript。这种方式可以在shell脚本或简单的命令行查询中使用该脚本。 – 2015-04-04 19:15:25