将变量从bash shell传递到sql文件到oracle表

时间:2013-01-03 01:37:35

标签: bash oracle11g sqlplus

我在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表中吗?

2 个答案:

答案 0 :(得分:5)

在命令行上传递参数:

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

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

例如

set scan on
insert into foo (env, release) values ('&1', '&2');
commit;

答案 1 :(得分:0)

假设您的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。