如何在bash脚本中执行SQL?

19

我有一些SQL脚本,想要自动化执行。过去我使用了SQL*Plus,并手动从bash脚本中调用sqlplus二进制文件。

但是,我现在正在尝试找到一种方法来连接到数据库并从bash脚本内部调用脚本...这样我就可以插入date并使查询相对于过去的某个特定天数运行。

7个回答

24

我有点困惑。你应该能够在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

有没有想过如何在PostgreSQL中实现相同的功能? - Dhiraj

9
您也可以使用"here document"来完成相同的操作:
VARIABLE=SOMEVALUE

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

4

以下是在bash shell中运行MySQL查询的简单方法:

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

1
这不是Oracle。 - Maxim Kumpan

4
也许你可以将SQL查询管道传输到sqlplus。这适用于mysql:
echo "SELECT * FROM table" | mysql --user=username database

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/

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"

文档在这里

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


-5

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


7
"sqlplus就是那个“第三方工具”" - michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接