我正在尝试使用 sqlplus 运行脚本。我的脚本是一个简单的删除语句。我通过将以下内容放入 ksh 终端来执行它:
sqlplus username/'password' @../sql/delete_societes.sql
../sql/delete_societes.sql 是
DELETE FROM f2020.SOCIETES;
/
由于某种原因,它运行两次,导致输出“0 rows deteleted”被打印两次,并在我尝试执行插入而不是删除时导致错误。
让你的脚本执行以下任一操作:
DELETE FROM f2020.SOCIETES
/
or
DELETE FROM f2020.SOCIETES;
没有斜杠。
从文档中 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/slash.html#GUID-F5EEC10C-6E74-4CCE-A196-C591F83C3D44:
/(slash)
执行存储在 SQL 缓冲区中的最近执行的 SQL 命令或 PL/SQL 块。
在下面的例子中:
输入斜杠(/)以重新执行缓冲区中的命令
...这正是您所看到的。
在这些文档的其他地方 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/SQL-Plus-basics.html#GUID-19D38608-829E-49BC-A452-50895163E311:
分号 (;) 表示命令结束。按回车键或单击“执行”。 SQL*Plus 处理命令并显示结果
与许多客户端一样,SQL*Plus 将 SQL 语句末尾的分号视为语句分隔符 - 它是not语句本身的一部分(这会导致一些混乱,例如动态 SQL 和 JDBC 调用) - 当它看到它时,它会执行命令。执行的语句保留在命令缓冲区中;如果你list
查看当前命令缓冲区,它不会显示分号。当您发出斜杠时,它会再次执行缓冲区。
PL/SQL 的情况略有不同; PL/SQL 块必须以分号终止,这is块的一部分,并出现在缓冲区中。你必须使用斜线执行 PL/SQL 块 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/SQL-Plus-basics.html#GUID-1C95D0FD-41A2-487A-A1F0-10509B8FC62C.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)