我有一些我试图自动化的SQL脚本。在过去,我使用过SQL * Plus,并从bash脚本手动调用sqlplus二进制文件。
但是,我想弄清楚是否有办法连接到数据库,并从bash脚本内部调用脚本...这样我就可以插入date
并使查询运行相对于过去的一定天数。
答案 0 :(得分:19)
尝试在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数据库连接......你需要使用某种第三方工具。