如何从 bash 脚本中执行 SQL?

问题描述 投票:0回答:7

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

但是,我试图弄清楚是否有一种方法可以连接到数据库,并从 bash 脚本内部调用脚本...这样我就可以插入

date
并使查询相对于某个特定运行过去的天数。

sql oracle bash plsql sqlplus
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

9
投票

您还可以使用“此处文档”来执行相同的操作:

VARIABLE=SOMEVALUE

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

4
投票

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

echo "SELECT * FROM table" | mysql --user=username database

4
投票

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

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

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 数据库连接...您将需要使用某种第三方工具。

© www.soinside.com 2019 - 2024. All rights reserved.