我编写了一个示例shell脚本,尝试使用SQLPLUS执行SQL文件。
这是我的shell脚本
#!/bin/bash
username=$1
password=$2
TNS_entry=$3
schema_version=$(sqlplus -S '$username/$password@$TNS_entry' @schema.sql)
echo "Schema_number: $schema_version";
#./schema.sh username password '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=SANDBOX.domain)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)
(SERVICE_NAME=orcl))'
执行此操作后,我收到SQLPLUS错误。
Schema_number: ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
但是,如果我手动运行此操作,我可以连接到Oracle DB而不会出现任何问题,结论我的SQLPLUS连接字符串没有问题。我猜测shell是罪魁祸首,但无法弄清楚它在哪里造成问题。
sqlplus username/password@'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SANDBOX.domain)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))' @schema.sql
SQL*Plus: Release 12.2.0.1.0 Production on Wed Mar 14 21:07:37 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
有人可以看看这个并帮我确定问题。
谢谢和问候
圣
答案 0 :(得分:0)
我通过编辑如下工作。 shell表现得很奇怪,无法解析引号。不确定这是理想的解决方案,但这个黑客达到了目的。
#!/bin/bash
username=$1
password=$2
TNS_entry=$3
schema_version=$(sqlplus -S ''"$username'"/'"$password'"@'"$TNS_entry'"' @schema.sql)
echo "Schema_number: $schema_version";