oracle数据库之PL/SQL程序结构(上)

来源:互联网 发布:centos 安装网卡驱动 编辑:程序博客网 时间:2024/05/24 04:14

                                

标签: SQLPLSQLoracle程序结构
591人阅读 评论(0)收藏举报
分类:
作者同类文章X

    最简单的PL/SQL 程序

    declare

     begin

        dbms_output.put_line(‘HelloWorld’);--注意是单引号

     end;

      /

    这个是在dos窗口里所应该写的,但是在pl/sql工具里不需要 结束标志;

    首先应该注意的是:

     如果要在屏幕上输出信息,需要将serveroutput开关打开

     set serveroutput on

    那让我们首先了解一下什么是PL/SQL以及程序结构的组成

    PL/SQLProcedure Language/SQL

    PLSQLOraclesql语言的过程化扩展

    指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。

    SQL优点:交互式非过程化;数据操纵功能强;自动导航语句简单;调试容易使用方便。

    PL/SQL程序结构

    declare

          说明部分    (变量说明,光标申明,例外说明 〕

    begin

          语句序列   (DML语句〕… 

    exception

          例外处理语句   

    End;

    /

    在这里提示一下pl/sql的注释是 --   或者用/* */

    变量和常量的说明:

    varl char(15);   --说明变量名、数据类型和长度后用分号结束说明语句。

    married boolean :=true; --注意这里的赋值有什么区别

    psal number(7,2); -- 表示psal最大有7位数,两位为小数

    my_name emp.ename%type;--表示myname类型为 emp表中的ename的类型

    emp_rec emp%rowtype; --代表记录型变量,这是一整条记录

    if语句的三种表达式:详情请看实例http://blog.csdn.net/liuxiaogangqq/article/details/8779447 

    1. IF   条件  THEN 语句1;

           语句2;

            end if;

    2. IF  条件  THEN  语句序列1;   

        ESLE   语句序列 2

        END   IF

    3. IF   条件  THEN 语句;

       ELSIF  语句  THEN  语句;

      ELSE    语句;

      END  IF;

    IF语句示例:

    accept num prompt '请输入数字';--接收键盘输入的值  会自动保存num的值

     declare--声明

       pnum number :=#-- &代表取值 pnum  格式 声明变量  变量类型 

       begin

         dbms_output.put_line(pnum);

    end;

    循环语句:

    第一种:

      WHILE  total  <= 25000  LOOP

    .. .

      total : = total + salary;

      END  LOOP;

    第二种:

      Loop

       EXIT [when   条件];

        ……

      End loop

    第三种:

       FOR   I   IN   1 . . 3    LOOP

       语句序列 ;

        END    LOOP ; 

    接下来讲一下重点的光标:

       说明光标语法:

       CURSOR  光标名  [ (参数名  数据类型[,参数名 数据类型]...)]

          IS  SELECT   语句;

    用于存储一个查询返回的多行数据

    打开光标:     open c1;    (打开光标执行查询)

    取一行光标的值:fetch c1 into pjob; (取一行到变量中)

    关闭光标:          close  c1;(关闭游标释放资源)

    注意: 上面的pjob必须与emp表中的job列类型一致:

    定义:pjob emp.job%type;

    按员工的工种长工资,总裁1000元,经理长800元其,他人员长400元。

     

      ---隐式游标

    declare  --声明

     emp_rec emp%rowtype;--记录

     begin  

         for emp_rec in (select * from emp)  --in 变量  变量必须是游标

      loop   --循环的开始

        dbms_output.put_line('员工名称:'||emp_rec.ename); 

      end loop; --循环的结束

     end;

     

    --带参数的游标

    declare

        cursor cl(pno number)  is select * from emp where empno=pno; --查询出所有的emp记录 存储到 cl游标中

     begin

        for emp_row in cl(7499) --打开游标 (自动)   检索数据(自动)  关闭游标(自动)  emp_row 变量也不需要定义

          loop 

            dbms_output.put_line(emp_row.ename);

         end loop;

     end; 

    例外

    例外是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性。

    Oracle的异常处理

    系统定义例外

    No_data_found    (没有找到数据)

    Too_many_rows          (select into语句匹配多个行

    Zero_Divide   ( 被零除)

    Value_error     (算术或转换错误)

    Timeout_on_resource      (在等待资源时发生超时)

    用户定义的例外

    declare

            no_data exception;   --设定一个例外名字

            emp_row emp%rowtype; --记录性变量

            cursor cl(pno number) is select *  from emp where empno=pno; --定义游标 pno 查询emp中与员工号相等的数据

            begin

              open cl(0000);  --为游标赋值

              fetch cl into emp_row; --cl中取出数据 给emp_row

              if cl%notfound then raise no_data; --在这里抛出例外 判断语句

              end if;

              close cl;

              exception                       --在这里捕获例外

              when no_data then

                  dbms_output.put_line('没有找到数据');

               end;

    1
    0
    0 0
    原创粉丝点击