Oracle学习(四)——15天Oracle入门

                                               PL/SQL编程(一)

 

:pl/sql基础

  1:PL/SQLoracle在标准sql语言上进行的过程性扩展后形成的程序设计语言.他不仅可以使用

   嵌套的sql而且还充许自定义各种变量,并使用程序实现各种操作.

  2:pl/sql 的基本结构:

     declare--可省

       --变量定义部分

     begin--不可省

      --语句快部分

     exception--可省

       --异常处理部分

     end;--不可省

   3:标量变量的定义 标量有varchar29

    定义语句: va varchar2(20);--定义了一个varchar2类型的变量va,其长度为20;

   4:参照变量 --定义一个变量参照其他已有的类型

    定义语句一: va emp.ename%type --定义了一个变量va,他的类型与emp表中的ename的类型一样

    定义语句二: va emp%rowtype--定义了一个变量va,他的类型与表emp表的行属性完全一样,他可以

                              --存多个数据.

   5:pl/sql语中使用select语句一定要定义一个变量并使用select..into..语句给其赋值

    --这个程序是会报错的,因为其没有给变量赋值

    begin

    select ename from emp where mgr is null;

    end;

    --修改如下:

    declare

    va emp.ename%type;

    begin

    select ename into va from emp where mgr is null;

    dbms_output.put_line(va);

    end;

   6:使用记录record来接收数据.记录record是一种复合数据类型.

   --record 定义如下

    declare

    type my_record is record --定义了一个包含一个number,一个varchar2,一个emp表中hiredate类型相同

    ( va1 number(8), --逗号            --date三个变量,们们组成了一个记录.

      va2 varchar2(20),

      va3 emp.hiredate%type

    );--这里还有一个分号

    va my_record;--定义一个记录变里vava中包含了三种数据类型。

    begin

    select empno,ename,hiredate into va from emp where mgr is null;

    dbms_output.put_line(va.va1||va.va2);--单个记录中的变量应用va.va1这种函数关系

    end;

 


 7:流程控制

    <1>.if语句

        第一种

         if 条件 then

            操作语句

         end if;

        第二种

         if 条件 then

            操作语句

         elsif

            操作语句

         end if

         第三种

          if 条件 then

             操作语句

           else

             操作语句

          end if

    <2>三种循环

          第一种 一般循环

          loop

          end loop;

           第二种 for 循环

           for i in 1..10 loop

           end loop;

           第三种 where 循环

           while 条件 loop

           i:=i+1;

           end loop;

     <3>case语句]

     case 属性

     when 条件值 then

        操作语句

     when 条件值 then

        操作语句

     else

         操作语句

      end case;


 

    8:标签的使用 --go to exit

    begin

      <<ou>>

      for i in 1 .. 10 loop

        dbms_output.put_line('i:' || i);

        for j in 1 .. 10 loop

          dbms_output.put_line('j:' || j);

          exit ou when j = 5; --exit标签必须在exit之前

        end loop;

      end loop;

    end;

  --使用goto 

    begin

      for i in 1 .. 10 loop

        dbms_output.put_line(i);

        if i = 5 then

          goto ou;--goto标签必须在goto之后

        end if;

      end loop;

      <<ou>>

      null;--并且null语句块不能省

    end;

 

二使用复合数据类型

--(1)单行单列的元素利用标量变量

    va  varchar2(20) --最大值为32767字节

    va char(20)      --最大值为32767字节

    va number(n,p)   --n为位数 ,p为精度,其可以省略

    va date          --日期数据类型

    va Timestamp     --亚秒时间数据类型

    va Long(row)     -- long 用于变长字符类型 long row 用于变长二进制 最大长度为32760字节

    va Binary_integer  --用于定义整型数据类型

    va binary_float  --用于定义单精度

    va binary_double --用于定义双精度类型  以上三种数据类型表列都不能用

   

--使用复合数据类型

--(1)单行多列的可以用集合;集合一般分为三种:索引表,嵌套表,varray三种形式。

--<1>索引表 索引表的下标可为负,元素个数没有限制。

declare

  type v_mytype is table of emp.ename%type index by binary_integer;

  v_a v_mytype;

begin

  select ename into v_a(-1) from emp where mgr is null;

  dbms_output.put_line(v_a(-1));

end;

-- 索引表可以用varchar2做为下标

 

declare

type vatype is table of  varchar2(20) index by varchar2(20);

va vatype;

begin

va('南京'):='南京';

va('北京'):='北京';

va('深圳'):='深圳';

va('成都'):='成都';

 dbms_output.put_line(va('南京')||' '||va('北京')||'  '||va('深圳')||' '||va('成都'));

 end;

 

--<2>嵌套表, 嵌套表的下标应该 1 开始,其元素个数没有限制.

create or replace type my_type is table of varchar2(10); --在制表时使用嵌套表

create table qiantiao

(

 tid number(5),

 tname my_type

)nested table tname store as aa;

 

drop  table qiantiao

insert into qiantiao values(1,my_type('kaka'))

 

select * from qiantiao

--select语句中使用嵌套表

declare

vt my_type;

begin

select ename into vt from emp where mgr is null;

for i in 1..va.count loop

dbms_output.put_line(vt(i));</sp

你可能感兴趣的:(数据结构,oracle,sql,编程,J#)