如何在bash脚本中执行SQL?

时间:2009-09-23 18:33:44

标签: sql oracle bash plsql sqlplus

我有一些我试图自动化的SQL脚本。在过去,我使用过SQL * Plus,并从bash脚本手动调用sqlplus二进制文件。

但是,我想弄清楚是否有办法连接到数据库,并从bash脚本内部调用脚本...这样我就可以插入date并使查询运行相对于过去的一定天数。

7 个答案:

答案 0 :(得分:19)

我有点困惑。您应该能够在bash脚本中调用sqlplus。这可能是你在第一次发表声明时所做的事情

尝试在bash脚本中执行以下命令:

#!/bin/bash          
echo Start Executing SQL commands
sqlplus <user>/<password> @file-with-sql-1.sql
sqlplus <user>/<password> @file-with-sql-2.sql

如果您希望能够将数据传递到脚本中,可以通过将参数传递到脚本中来通过SQLPlus执行此操作:

file-with-sql-1.sql

的内容
 select * from users where username='&1';

然后更改bash脚本以调用sqlplus传入值

#!/bin/bash

MY_USER=bob
sqlplus <user>/<password> @file-with-sql-1.sql $MY_USER

答案 1 :(得分:8)

你也可以使用“here here”来做同样的事情:

VARIABLE=SOMEVALUE

sqlplus connectioninfo << HERE
start file1.sql
start file2.sql $VARIABLE
quit
HERE

答案 2 :(得分:1)

也许你可以将SQL查询传递给sqlplus。它适用于mysql:

echo "SELECT * FROM table" | mysql --user=username database

答案 3 :(得分:0)

我在Sourceforge上使用过jdbcsql项目。

在* nix系统上,这将创建一个csv结果流以标准输出:

java -Djava.security.egd=file///dev/urandom -jar jdbcsql.jar -d oracledb_SID -h $host -p 1521 -U some_username -m oracle -P "$PW" -f excel -s "," "$1"

请注意,添加-Djava.security.egd=file///dev/urandom可以大大提高性能

Windows命令类似:请参见http://jdbcsql.sourceforge.net/

答案 4 :(得分:0)

如果您不想在服务器/计算机上安装sqlplus,则以下命令行工具可以成为您的朋友。这是一个简单的Java应用程序,只有您需要的Java 8才能执行此工具。

该工具可用于从Linux bash或Windows命令行运行任何SQL。

示例:

java -jar sql-runner-0.2.0-with-dependencies.jar \
     -j jdbc:oracle:thin:@//oracle-db:1521/ORCLPDB1.localdomain \
     -U "SYS as SYSDBA" \
     -P Oradoc_db1 \
      "select 1 from dual"

文档为here

您可以从here下载二进制文件。

答案 5 :(得分:-3)

这是在bash shell中运行MySQL查询的一种简单方法

mysql -u [database_username] -p [database_password] -D [database_name] -e "SELECT * FROM [table_name]"

答案 6 :(得分:-4)

由于Bash没有内置的sql数据库连接......你需要使用某种第三方工具。