Oracle特殊数据类型

1.1PL/SQL变量、常量和数据类型

1.1.1定义变量

1.定义变量
运行过程中可以改变数据存储结构。

<变量名><数据类型>[<长度>:=<初始值>];

var_countryname varchar2(50):="中国";

2.定义常量
常量指定值在运行过程中不可改变的数据存储结构。比如一些防止被修改的数值,列如圆周率,光速等。最好定义常量

<常量名> constant <数据类型>:=<常量值>;

--定义常量存储一年的天数
on_day constant integer:=354;

1.1.2基本数据类型

PL/SQL基本数据类型

1.数值类型
    数值类型包括NUMBER、PLS_INTEGER和BINARY_INTEGER三种基本类型。其中,NUMBER类型存储整数或浮点数;PLS_INTEGER和BINARY_INTEGER只适合存储整数。NUMBER可以通过NUMBER(P,S)格式化数字。P表示精度,S表示范围。
    基于其他编程语言数据类型兼容。提出了子类型概念。NUMBER类型子类型DEC    DECIMAL    DOUBLE    INTEGER    INT    NUMERIC    SMALLINT    BINARY_INTEGER    PLS_INTEGER

2.字符类型
    字符类型主要包括VARCHAR2、CHARLONGNCHAR、NVARCHAR2等。
1):VARCHAR2(MAXLENGTH)
    参数maxlength可以存储字符串最大长度。最大为32767字节
※:数据库类型VARCHAR2最大长度4000字节。所以最大长度4000字节PL/SQL类型的VARCHAR2变量是不可以赋值给数据库VARCHAR2变量的,只能赋值给LONG类型数据库变量。
2):CHAR
    最大字节32767字节。CHAR类型的默认长度为1.
※:数据库中CHAR只有2000字节,所以PL\SQL变量长度大于2000个字节,则不能赋值给数据库的CHAR。
3):LONG
    LONG表示一个可变的字符串,数据库类型最大长度达到2GB。几乎所有字符变量都可以。
4):NCHAR和NVARCHAR2类型
    NCHAR和NVARCHAR2类型是PL\SQL8.0之后加入的类型,她的长度要根据字符集来确定。

3.日期类型
    只有一种DATE类型,存储日期和时间信息,DATE类型的存储空间7字节。分别1字节存储世纪、年、月、天、小时、分钟、秒。

4.布尔类型
    只有一种BOOLEAN类型,主要做程序判断,变量值可以为TRUE FALSE或NULL。

1.1.3特殊类型

1%type类型
    使用%TYPE类型声明一个指定列名相同的数据类型,他通常紧跟着指定列名的后面。
声明一个EMP表JOB列相同数据类型变量
DECLARE
    VAR_JOB_EMP EMP.JOB%TYPE;
    
列:
DECLARE
    VAR_ENAME EMP.ENAME%TYPE;
    VAR_JOB EMP.JOB%TYPE;
BEGIN
    SELECT ENAME,JOB INTO  VAR_ENAME,VAR_JOB FROM EMP WHERE EMPNO=7369;
    DBMS_OUTPUT.PUT_LINE( VAR_ENAME||"的"||VAR_JOB);
END;
/
2.RECORD类型
    记录之意。RECORD类型存储多个行列组成的数据。
列:
DECLARE
    TYPE EMP_TYPE IS RECORD(
        VAR_ENAME VARCHAR2(20),
        VAR_JOB VARCHAR2(20),
        VAR_SQL NUMBER
    );
    EMOINFO EMP_TYPE;
BEGIN
    SELECT ENAME,JOB,SAL INFO EMPINFO FROM EMP WHERE EMPNO=7369;
    DBMS_OUTPUT.PUT_LINE(EMPINFO.VAR_ENAME);
END;
/
3.%ROWTYPE类型
    %ROWTYPE类型变量结合了"%TYPE类型"和"RECORD类型"变量的优点。根据数据表中行的结构定义一种特殊的数据类型,用来存储数据表中检索到的一行数据。

列:
DECLARE
    ROWVAR_EMP EMP%ROWTYPE;
BEGIN
    SELECT * INTO ROWVAR_EMP FROM EMP WHERE EMPNO=7369;
    DBMS_OUTPUT_PUT_LINE(ROWVAR_EMP.ENAME);
END;
/

1.2PL/SQL基本程序结构语句

if...then:判断正确则执行then
if...then...else:判断if正确则执行then,否则执行else
if...then...elseif:嵌套式判断
case:有逻辑从数值中选出
loop...exit...end:循环控制,利用判断语句执行exit
loop...exit when...end:同上,当when为真执行exit
while...loop..end:当while为真循环
for..in...loop...end:已知循环次数的循环
GOTO:无条件转向控制

1.2.1PL/SQL程序块

DECLARE    --声明部分
BEGIN         --执行部分
[EXCEPTION]         --异常处理部分
END;    

异常处理部分:
DECLARE
    A INT:=100;
    B INT:=200;
    C NUMBER;
BEGIN
    C:=(A+B)/(A-B);
    DBMS_OUTPUT.PUT_LINE(C);
EXCEPTION
    WHEN ZERO_DIVIDE THEN
    DBMS_OUTPUT.PUT_LINE("除数不可以为零");
END;
/

 

posted @ 2017-02-21 17:08  珈子  阅读(1132)  评论(0编辑  收藏  举报