You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KSH脚本向Oracle表插入含特殊字符的用户注释报错求助

解决KSH脚本插入含特殊字符注释到Oracle表的问题

问题根源

你的脚本直接将用户传入的参数拼接到SQL语句中,当参数包含单引号(比如示例中的Let's)时,SQL解析器会把这个单引号当成字符串的结束标记,导致语句语法错误,触发ORA-01756错误。Oracle中需要把字符串里的单引号转义为两个连续单引号才能正确识别。

修改后的脚本

#!/usr/bin/ksh
# 将参数中的单引号转义为两个单引号,适配Oracle的字符串语法
export ESCAPED_COMMENTS=$(echo "${1}" | sed "s/'/''/g")
echo "${1}"
echo "========================================="

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

关键说明

  • 使用sed "s/'/''/g"将输入参数中的所有单引号替换为两个单引号,这是Oracle中处理字符串内单引号的标准方式。
  • 用"${1}"包裹参数,避免参数包含空格时被拆分。

测试验证

执行示例命令:

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

此时转义后的参数会变成Let''s test this ##@@,插入SQL时语法正确,不会触发错误。

额外提示

如果用户输入包含换行符、反斜杠等其他特殊字符,可以根据Oracle的要求进一步扩展转义逻辑,但单引号是最常见的触发错误的字符,处理后基本能覆盖绝大多数场景。

内容的提问来源于stack exchange,提问作者Carlos Andre Cardoso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:27:04