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

时间:2022-04-23 06:31:15

最简单的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元。

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

 

  ---隐式游标

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;