我有一些正在尝试自动化的 SQL 脚本。过去我使用过 SQL*Plus,并从 bash 脚本手动调用 sqlplus 二进制文件。
但是,我试图弄清楚是否有一种方法可以连接到数据库,并从 bash 脚本内部调用脚本...这样我就可以插入
date
并使查询相对于某个特定运行过去的天数。
我有点困惑。 您应该能够从 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
您还可以使用“此处文档”来执行相同的操作:
VARIABLE=SOMEVALUE
sqlplus connectioninfo << HERE
start file1.sql
start file2.sql $VARIABLE
quit
HERE
也许你可以将 SQL 查询通过管道传输到 sqlplus。它适用于 mysql:
echo "SELECT * FROM table" | mysql --user=username database
这是在 bash shell 中运行 MySQL 查询的简单方法
mysql -u [database_username] -p [database_password] -D [database_name] -e "SELECT * FROM [table_name]"
我在 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/
如果您不想在服务器/计算机上安装
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"
文档位于此处。
您可以从这里下载二进制文件。
由于 Bash 没有内置的 sql 数据库连接...您将需要使用某种第三方工具。