2

我在文件中的my .sh文件(例如ENV=$1 RELEASE_ID=$2)中设置了变量my.sh。我sqlplus进入我的sql文件喜欢

sqlplus -S $username/password@destination @/path/copysetup/insert.sql

我想ENV=$1 RELEASE_ID=$2将从 unix 提示符调用的变量传递到我的 sql 文件中

copysetup.sh env01 release 1.0

从我的 sql 文件中,我想将相同的变量传递到 oracle 表中

insert into table...

有人可以协助如何将变量从 bash shell 脚本传递到 sql 文件并最终将其插入到我的 oracle 表中吗?

4

2 回答 2

5

在命令行传递参数:

sqlplus -S $username/password@destination @/path/copysetup/insert.sql $ENV $RELEASE_ID

然后在 SQL 脚本中它们变成 &1 和 &2 (确保你有set scan on在 SQL 脚本的顶部)

例如

set scan on
insert into foo (env, release) values ('&1', '&2');
commit;
于 2013-01-03T12:36:42.207 回答
1

假设您的 insert.sql 文件是您想要插入环境变量(或任何 bash 变量)的文件,您可以使用sed查找/替换一些占位符文本为您想要的值。例如,如果您的 insert.sql 文件看起来像

INSERT INTO @mytable VALUES (1,'sometext');

您可以使用 sed在 bash 脚本中使用以下语法使用@mytable存储的数据查找/替换字符串$MYVAR

sed "s/@mytable/$MYVAR" insert.sql > modifiedinsert.sql

现在这将生成一个新文件 modifiedinsert.sql,然后您将其传递给 sqlplus。

于 2013-01-03T01:48:35.797 回答