我有一些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
以下是在bash shell中运行MySQL查询的简单方法:
mysql -u [database_username] -p [database_password] -D [database_name] -e "SELECT * FROM [table_name]"
echo "SELECT * FROM table" | mysql --user=username database
我在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
可以显著提高性能。sqlplus
,那么以下命令行工具可以帮助您。它是一个简单的Java应用程序,只需要Java 8即可执行此工具。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数据库连接功能...您需要使用某种第三方工具。