17

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

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

4

7 回答 7

22

我有点困惑。您应该能够从 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
于 2009-09-23T18:43:52.423 回答
9

你也可以使用“这里的文档”来做同样的事情:

VARIABLE=SOMEVALUE

sqlplus connectioninfo << HERE
start file1.sql
start file2.sql $VARIABLE
quit
HERE
于 2013-03-21T22:09:46.297 回答
2

也许您可以将 SQL 查询通过管道传输到 sqlplus。它适用于mysql:

echo "SELECT * FROM table" | mysql --user=username database
于 2009-09-23T18:46:57.550 回答
0

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

mysql -u [database_username] -p [database_password] -D [database_name] -e "SELECT * FROM [table_name]"
于 2009-09-23T18:46:45.083 回答
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"

文档在这里

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

于 2020-08-04T16:01:13.290 回答
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/

于 2018-12-20T02:54:23.730 回答
-5

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

于 2009-09-23T18:44:30.113 回答