oracle的学习历程 2017/8/30

来源:互联网 发布:淘宝店客户具体地址 编辑:程序博客网 时间:2024/05/22 04:52

今天主要学习PL/SQL块的大致理念,后续将会针对这块进行详细学习。

基本结构:

首先PL/SQL是一种模块式结构的语言:

DECLARE

声明一些变量,常量,用户定义的数据类型以及游标等                                       所以,我们也可以                  begin  执行部分

可选,可以不写                                                                                                     这么写                                     end;

BEGIN

主程序体,程序就是执行这里的东西,可以加入各种合法语句

EXCEPTION

异常处理,当程序出现错的时候执行这里的内容

END;  (这里的分号是必须的)

主程序体结束


PL/SQL注释

单行数值  --注释的内容

比如 DECLARE     --程序变量定义

多行注释:由/*开头,*/结尾和C语言一样     

比如:begin    /* 插入一条记录

            这么写*/

           insert into classes (department,course)

values(V_Department ,V_Course);

End;


type 定义的数据类型

Oracle提供自定义类型功能,用户可以根据自己的情况定义记录数据类型(Record)和记录表类型(Table),其中记录数据类型Record存储是一条记录,记录表类型Table用来存储多条记录。如果记录数据类型Record是一维数组的话,记录表类型Table就是二维数组。

自定义类型有两种写法:TYPE...IS和CREATE TYPE,两种定义方式的区别是:前者一般在存储过程和函数中定义,使用范围也限于所在过程或函数,而后者方式声明对象类型,对象类型则是作为一个方案对象(像表、索引、视图、触发器一样,是一个方案对象),可以过程或函数中使用,还可以在定义表时,作为字段的类型。

1. 定义数据记录类型
语法:
     TYPE type_name IS RECORD (
              字段1     类型1,
              字段2     类型2,
              ...
              字段n     类型n
      );
说明:
1) type_name:类型名称。

比如 type teacher_record is RECORD

        ( TID NUMBER(5)

           name varchar(50),

           title varchar2(50),

           sex char(1) 

            );

定义一个teacher_record类型的记录变量ateacher

ateacher teacher_record

引用记录变量的时候要指明内部变量,如ateacher teacher_record;

2.定义表记录

 

语法:

     TYPE type_name IS TABLE OF element_type

           INDEX BY[BINARY_INTEGER | PLS_INTEGER | VARRAY2];     

说明:

1) type_name:类型名称。

2) element_type:可以是基本类型(如varchar2, Ingeger, number等)、记录数据类型(即TYPEtype_nameIS RECORD定义的类型)、%ROWTYPE。

3) INDEX BY:该语句的作用是使Number类型的下标自增长,自动初始化,并分配空间,有了该语句,向表记录插入元素时,不需要显示初始化,也不需要通过extend分配空间。Binary_Integer 与 Pls_Integer 都是整型类型。

Binary_Integer类型变量值计算是由Oracle来执行,不会出现溢出,但是执行速度较慢,因为它是由Oracle模拟执行。而Pls_Integer的执行是由硬件即直接由CPU来运算,因而会出现溢出,但其执行速度较前者快许多。

如果没有使用这个语句,又没有使用extend就会报错:ORA-06531:Reference touninitialized collection。相关解决办法


另外,PL/SQL还提供了%type和%rowtype两种特殊变量,用于声明与表的列相匹配的变量和用户定义数据类型。%type 表示单属性的数据类型,%rowtype表示整个属性列表的结构。

比如,tid teachers.tid%type  表示定义一个tid的变量,他的类型是teachers.tid

对于整张表的例子:teacher_record Teachers%rowtype        定义一个名为teacher_record与teachers结构类型一样的记录变量。


PL/SQL变量和常量

定义常量

常量名  constant 数据类型:=值

pass constant integer:=60


定义变量

变量名  数据类型  【宽度:=初始值】       初始值可以定义也可以不定义,这点和java不一样,但是oracle中其实是给变量赋予了初始值,值为null


控制语句:


case 结构 类似switch语句

case 表达式                                                      

 when   表达式1 then 语句序列1

 when   表达式2 then 语句序列1

                    。

                    。

                    。

 when   表达式n then 语句序列n

end;

null:

关于这个,当变量没有赋初始值的时候,如果不知道系统默认是null还是一个实数,我们要在if判断的时候加一条null判断语句

if a is null or b is null then 

dbms_output.put_line(判断为null)


循环结构

loop...exit...end(其中exit代表退出循环)

control:=0;

loop

if control>5 then

      exit;

end if;

control:=control+1

end loop;

Loop...exit when ...end

在when后面会有一个判断条件,当判断条件满足的时候退出循环,先循环后判断

control:=0;

loop

exit when control>5                      -- 如果control>5则退出循环

control:=control + 1;

end loop;


while 。。。loop。。。end 先判断后循环

while control<5 loop 

control:=control + 1;

end loop;


for...in...loop...end 可预知循环次数的语句

for control in 0...5 loop  从0到5进行循环,共循环6次

end loop;


goto 这个原理很简单,就是强制跳转,但是轻易不要使用。容易把代码复杂化。
















原创粉丝点击