oracle 使用KSH shell向表中插入注解文本

c3frrgcw  于 2023-03-29  发布在  Oracle
关注(0)|答案(1)|浏览(119)

我有一个脚本,现在有必要在当前语句中添加一个从用户接收的COMMENT文本作为参数。下面是一个例子,但它失败了。有人能帮助我吗?

\<sup\>#!/usr/bin/ksh

export COMMENTS=${1}
echo ${COMMENTS}
echo "========================================="

sqlplus -s $CONNECT_STRING \<\<-EOF
whenever sqlerror exit 2;
insert into TEST_CACM (COMMENTS) values ('${COMMENTS}');
commit;
EOF\</sup\>

当我们执行它失败,因为特殊字符.

<kbd>test.ksh "Let's test this  ##@@"
Let's test this ##@@
=========================================
ERROR:
ORA-01756: quoted string not properly terminated</kbd>

注:用户可以添加任何注解。用户添加的任何注解都应存储在表中。

q35jwt9p

q35jwt9p1#

或者:
1.传入字符串值时,转义字符串值中的单引号:

test.ksh "Let''s test this  ##@@"

1.使用q引号字符串(不要将q引号字符串的结束表达式作为参数的子字符串传递):

#!/usr/bin/ksh

export COMMENTS=${1}
echo ${COMMENTS}
echo "========================================="

sqlplus -s $CONNECT_STRING \<\<-EOF
whenever sqlerror exit 2;
insert into TEST_CACM (COMMENTS) values (q'[${COMMENTS}]');
commit;
EOF

1.或者将所有单引号替换为两个单引号:

#!/usr/bin/ksh 

export COMMENTS="$(echo $1 | sed "s/'/''/g")"
echo "$COMMENTS"
echo "========================================="

sqlplus -s $CONNECT_STRING \<\<-EOF
whenever sqlerror exit 2;
insert into TEST_CACM (COMMENTS) values ('${COMMENTS}');
commit;
EOF

1.不要使用SQL*Plus,而是用另一种语言(即Python、Java、C#等)编写一个小应用程序,允许您使用参数化查询并将命令行参数作为绑定变量传递。

相关问题