在tcsh中创建oracle数据库链接时严重放置()

时间:2012-01-02 20:14:45

标签: oracle unix tcsh

#my code

echo \
'create database link remotec101 \
connect to "os_user" \
identified by "password" \
using ' \
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) \
(HOST=c101) \
(PORT=1521)) \
(CONNECT_DATA=(SID=XE)))';'|sqlplus

我尝试以这种方式运行一些sql并且它有效。但是在创建数据库链接时,我收到了错误,说错了放置()的

此代码位于tcsh。

请帮帮我。

由于

2 个答案:

答案 0 :(得分:2)

括号未被引用,因此它们被视为shell元字符。

此:

echo \
'create database link remotec101 \
connect to "os_user" \
identified by "password" \
using \
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) \
(HOST=c101) \
(PORT=1521)) \
(CONNECT_DATA=(SID=XE)));' | sqlplus

将以下内容提供给sqlplus命令:

create database link remotec101 
connect to "os_user" 
identified by "password" 
using 
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) 
(HOST=c101) 
(PORT=1521)) 
(CONNECT_DATA=(SID=XE)));

但是“这里的文件”可能更清晰:

sqlplus <<'EOF'
create database link remotec101
connect to "os_user"
identified by "password"
using
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=c101)
(PORT=1521))
(CONNECT_DATA=(SID=XE)));
'EOF'

如果您希望最后4行成为sqlplus的单行输入,我认为您需要将它们全部放在脚本的一行中。或者您可能会发现使用printf命令组织输出更容易,例如:

printf '%s\n%s\n%s\n%s\n%s %s %s %s\n' \
    'create database link remotec101' \
    'connect to "os_user"' \
    'identified by "password"' \
    'using' \
    '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)' \
    '(HOST=c101)' \
    '(PORT=1521))' \
    '(CONNECT_DATA=(SID=XE)));' | sqlplus

这会将最后4行打印为一行。您可以根据需要调整格式字符串。

答案 1 :(得分:1)

我明白了。你必须利用tcsh支持两种引用类型的事实,echo允许多个参数:

echo 'create database link remotec101 \
connect to "os_user" \                                                          
identified by "password" \                                                      
using ' "'" ' ( DESCRIPTION= ( ADDRESS= ( PROTOCOL=TCP )
 ( HOST=c101 ) 
 ( PORT=1521 ) ) 
 ( CONNECT_DATA= ( SID=XE ) ) ) ' "';"