1.1 数据命名规则
声明时可以把名字放在双引号之中,实际上可以跳过除最长30字符的所有限制,例如:
declare "True_lower_case" INTEGER; " " DATE; --没错,四个空格也可以! “123_gogo” varchar2(10); begin end;
注意:代码中要引用这些名字也同样需要使用双引号。
1.2 数据类型
1.2.1 布尔类型
PL/SQL支持三值的布尔数据类型:TRUE,FALSE,NULL
1.2.2 二进制数据类型
Oracle支持几种形式的二进制数据,包括RAW,BLOB,和BFILE
1.2.3 Internet数据类型
Oracle提供了针对XML和URI数据的数据类型,以及一个叫做DBUri-REF的类。
可以用SYS_XML.GEN函数和DBMS_XMLGEN程序包在数据库中查询和存储XML数据。还允许我们用SQL语句中的原生操作符通过Xpath语言搜索XML文档。
URI相关的类型有URIType和HTTPURIType,都属于一个对象继承层次的一部分,可以用于保存外部WEB页面的URL和文件,同时也可以指向内部数据库的数据。
1.2.4 “Any”数据类型
“Any”类型可以使我们动态的封装和访问类型描述、数据实例以及任何其他SQL类型的数据实例集。
“Any”数据类型包括 AnyType, AnyData 和 AnyDataSet.
1.3 类型转换
1.3.1 隐式类型转换
下图显示了PL/SQL可以完成的隐式类型转换。
From\To | CHAR | VARCHAR2 | NCHAR | NVARCHAR2 | DATE |
DATETIME/ |
NUMBER | BINARY_ FLOAT |
BINARY_ |
BINARY_ INTEGER |
PLS_ INTEGER |
SIMPLE_ INTEGER |
LONG | RAW | ROWID | CLOB | BLOB | NCLOB |
CHAR | \ | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |
VARCHAR2 | ● | \ | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |
NCHAR | ● | ● | \ | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||||||
NVARCHAR2 | ● | ● | ● | \ | ● | ● | ● | ● | ● | ● | ● | |||||||
DATE | ● | ● | ● | ● | \ | |||||||||||||
DATETIME/ INTERVAL |
● | ● | ● | ● | \ | ● | ||||||||||||
NUMBER | ● | ● | ● | ● | \ | ● | ● | ● | ● | ● | ||||||||
BINARY_ FLOAT |
● | ● | ● | ● | ● | \ | ● | ● | ● | ● | ||||||||
BINARY_ DOUBLE |
● | ● | ● | ● | ● | ● | \ | ● | ● | ● | ● | |||||||
BINARY_ INTEGER |
● | ● | ● | ● | ● | ● | ● | \ | ● | ● | ● | |||||||
PLS_ INTEGER |
● | ● | ● | ● | ● | ● | ● | ● | \ | ● | ● | |||||||
SIMPLE_ INTEGER |
● | ● | ● | ● | ● | ● | ● | ● | ● | \ | ● | |||||||
LONG | ● | ● | ● | ● | ● | ● | ● | ● | \ | ● | ● | ● | ||||||
RAW | ● | ● | ● | ● | ● | \ | ● | |||||||||||
ROWID | ● | ● | ● | \ | ||||||||||||||
CLOB | ● | ● | ● | ● | ● | \ | ● | |||||||||||
BLOB | ● | \ | ||||||||||||||||
NCLOB | ● | ● | ● | ● | ● | ● | \ |
隐式转换类型的缺陷:
1)PL/SQL是静态类型语言。如果程序执行了隐式类型转换,会失去代码的清晰和安全性
2)对代码总会产生影响
3)隐式类型转换依赖于代码的上下文
4)显示类型转换相对来说具有更好的可读性
总之,应尽量避免使用隐式类型转换。
1.3.2 显示类型转换
CAST函数是把一个内置的数据类型或者集合类型的数据转换成另外一个置数据类型或者集合类型