VARCHAR与VARCHAR2
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;
3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
存储过程和函数
存储过程:
Create [ or replace ] Procedure 名(参数列表)
As|is
声明部分
Begin
。。。。
[exception] End [名];
函数:
Create [ or replace ] function 名(参数列表)
Return 类型
As|is
声明部分
Begin
。。。。
[exception] End [名];
参数列表中参数的声明:
参数名 参数模式 参数类型
Id in | out | in out number
默认时,为in,参数可为变量或者常量。
另外两种,必须为变量。
存储过程和函数的区别主要在返回值上。存储过程并非是没有返回,可以通过参数返回返回值的,自身不具有返回,即没有显示的返回。而函数除了参数列表的参数有返回能力以外,还有一个显式的返回值,即自身返回值。
exists 与 in
exits 相当于存在量词:表示集合存在,也就是集合不为空只作用一个集合.
例如 exist P表示P不空时为真; not exist P表示p为空时为真in表示一个标量和一元关系的关系。
例如:s in P表示当s与P中的某个值相等时 为真; s not in P 表示s与P中的每一个值都不相等时 为真 。
in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
一直以来认为exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in
当在限制语句NULL或NOT NULL 关键字时,不能写成 = NULL 或 <> NULL , 要写成 IS NULL。 因为NULL不是一个值。