如何使用SQL*Plus执行含PL/SQL程序的.sql文件
在SQL*Plus中正确执行你的PL/SQL脚本的方法
刚好碰到过类似的场景,给你梳理下具体步骤和注意事项——毕竟SQL*Plus对PL/SQL块的终止规则比SQL Developer要严格一些:
1. 先修正你的myfile.sql脚本结尾
你现在的脚本最后只写了end;,这在SQL Developer里没问题,但SQL*Plus需要一个明确的「执行触发符」——也就是单独一行的/。修改后的脚本应该是这样:
declare listTotal number := 0; nbrCommit number := 200; begin select count(1) into listTotal from MKTMLF.TMP_ID_CLI_SUPPR; [... 不同的更新操作 ....] commit; if listTotal > nbrCommit THEN [... 不同的更新操作 ....] commit; end if; end; /
这里的/必须单独占一行,它的作用是告诉SQLPlus:「好了,整个PL/SQL块已经写完了,现在执行它」。如果没有这个/,SQLPlus可能会一直等着你输入更多内容,或者直接报错说PL/SQL块未完成。
2. 在SQL*Plus里执行脚本的命令
脚本修正后,直接在SQL*Plus的命令提示符下输入:
@myfile.sql
如果你的脚本不在SQL*Plus当前的工作目录里,记得加上完整路径,比如:
@/home/youruser/scripts/myfile.sql
3. 确认执行结果
执行成功的话,SQL*Plus会返回:
PL/SQL procedure successfully completed.
如果有错误,它会给出具体的行号和错误代码,你可以根据提示调整脚本里的问题。
为啥SQL Developer里不用加/也能跑?
因为SQL Developer做了优化,它能自动识别PL/SQL块的结束位置,即使没有单独的/也能正确解析执行。但SQL*Plus是更传统的命令行工具,遵循Oracle早期的交互规则,所以必须加上这个触发符。
内容的提问来源于stack exchange,提问作者Siick
相关产品推荐
相关产品推荐

