SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
2026-09-25 07:44 AlfredZhao 阅读(0) 评论(0) 收藏 举报最近笔者用 SQLcl 测试一条 SQL 查询,没有用传统的 sqlplus,结果发现最常用的替换语法 c/old/new 竟然报错。难道 SQLcl 比 sqlplus 更难用?其实不是,只是 SQLcl 要求更严格。
01 | 现象:直接替换报错
笔者先执行了一条层级查询,缓冲区里保存着完整 SQL。接着想替换其中的变量值:
SQL> c/RAW-RUBBER-001/RAW-CARBON-002
SP2-0023: String not found
提示找不到字符串。用 l 查看,SQL 明明还在缓冲区里,内容也没变。
02 | 原因:SQLcl 要求先定位行
在笔者使用的 SQLcl 版本中,问题不在语法本身,而在于替换命令需要先明确当前行,再执行替换;这与 sqlplus 的默认行为不同。具体行为请以所用 SQLcl 版本的官方文档和实际测试结果为准。
笔者用 l 9 精确定位到第 9 行,也就是要替换的内容所在行。替换前应先确认行号和缓冲区内容,因为后续替换只作用于当前定位行:
SQL> l 9
9* START WITH g.parent_lot_id = 'RAW-RUBBER-001'
然后再执行同样的替换命令:
SQL> c/RAW-RUBBER-001/RAW-CARBON-002
这次替换成功,第 9 行变成了 RAW-CARBON-002。再执行 / 运行,结果正确返回。
03 | 小结
在本文使用的 SQLcl 环境中,c/old/new 依然可用,但需要先定位到目标行,再执行替换。实际使用时请结合所用版本确认命令行为。
关注我,和AI一起成长~
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/23118624
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/23118624
👋 感谢阅读,欢迎关注我的公众号 「赵靖宇」
浙公网安备 33010602011771号