在sql*plus工具中,会有一个buffer(缓存),这个buffer中只能存放一条sql语句(不管这条sql语句多少行),buffer中会存放着我们最近一次执行过的一条sql语句。
L或者l //大写或小写都可以list,显示buffer中存放的sql语句
/ //这一命令可以执行buffer中的sql语句
2 //选择buffer中的第二行
a //在buffer中的sql语句的某一行(选择的那一行)后面增加内容,a后面跟的内容
i //在buffer中的sql语句中的某一行(选择的那一行)下面插入一行,i后面跟的内容
del //删除某一行(选择的那一行)
c/ma/me //将某一行(选择的那一行)中的ma替换成me
2 新代码 //将buffer中第2行中的代码全部重写为新代码
save LL.sql //将buffer中的额内容保存到文件LL.sql中,文件在登录sql前的路径存放。
clear buffer //清空缓冲区
start LL.sql //执行文件LL.sql中保存的命令。
@LL.sql //执行文件LL.sql中保存的命令。
edit LL.sql //修改LL.sql文件,使用系统中默认的编辑器打开
get LL.sql //显示LL.sql文件中存储的命令。
spool spool.sql //将接下来的操作记录在spool.sql文件中直到spool off
spool off //记录结束
如下操作
sql> select * from dual
2 where 1=1
3 ;
D
-
X
sql> l
1 select * from dual
2 where 1=1
3*
sql> 2 where null = 1
sql> l
1 select * from dual
2 where null = 1
3*
sql> /
未选定行
sql>
2 where null = null
sql> /
未选定行
顺便一提的是null 同任何数值计算结果既不是true,也不是false。(参考[1])
如果表中的字段有可能为空,可以使用“decode(column,:bind_variable,1) = 1”或者
“where (column = :bind_variable or ( column is null and :bind_variable is null)”。这两种写法等价,都可以使用。不过decode()更简洁一些。
sql> select * from dual
2 where decode(null,null,1) = 1
3 /
D
-
X
此外,我又做了如下测试
sql> select decode(null,null,1) from dual;
DECODE(NULL,NULL,1) -------------------
1
sql> select decode(null,2,1) ----------------
sql> select * from dual;
D
-
X
sql> select * from dual where decode(null,2,1)=1;
未选定行
sql> select decode(null,1,0) from dual;
DECODE(NULL,0) ------------------
0
参考资料 (1)Oracle_Database_9i10g11g编程艺术深入数据库体系结构第2版181页,锁定问题,6.2.2悲观锁定