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