动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   数据库 → 阅读文章

 PL/SQL的一些语法

作者来源: 
阅读 数 296 人次 , 2006-5-11 11:22:00 

写一些关于PL/SQL的语法,免得等到用到的时候还要去乱翻。
1。控制流程(if,while)
2。循环(for)
3。游标(cursor)
4。异常处理(exception)

1。控制流程()


A.条件语句
IF <statement> THEN
   PL/SQL
END IF;

IF <statement> THEN
   PL/SQL
ELSE
   PL/SQL
END IF;

IF
<statement> THEN
   PL/SQL
ELSIF <statement> THEN
   PL/SQL
END IF;


2。循环

A.simple loop
LOOP
   SQL
   EXIT WHEN <statement>;
END LOOP;

LOOP
   SQL
   IF
<statement> THEN
   EXIT;
   END IF;
END LOOP;

B.While loop
WHILE <statement> LOOP
   SQL
END LOOP;

C.For loop
FOR $counter in $low .. $high LOOP
   SQL
END LOOP


3。游标

在PL/SQL程序中定义的游标叫做显式游标。

A.显式游标的处理由四个部分组成:
cursor $cursorname is $Query;   --定义游标
open $cursorname;         --打开游标
fetch $cursorname into $othervariable  --把游标中的东西取出
close $cursorname    --关闭游标

B.游标属性
%found         布尔型属性,当最近一次读纪录成功
,为true.
%nofound                失败时,为false.
%isopen
%rowcount      返回已从游标中读取的记录数。

C.参数化游标

所有的SQL语句在上下文区内部都是可执行的,因此都有一个游标指向上下文区,此游标就是所谓的SQL游标。
与显式游标不同,SQL游标不被程序打开和关闭。


4.异常处理概念

异常处理是用来处理正常执行过程中未预料的事件。如果PL/SQL程序块一旦产生异常而又没有指出如何处理时,程序会自动终止。
异常处理部分放在PL/SQL的后半部分,结构为:

EXCEPTION
       WHEN first_exception THEN <code to handle first exception>
       WHEN second_exception THEN <code to handle second exception>
       WHEN OTHERS THEN <
code to handle second exception>  --OTHERS必须放在最后

异常分为预定义和用户定义两种。
用户定义的异常是通过显式使用RAISE语句来引发。如

DECLARE
  e_TooManyStudents EXCEPTION;  -- 类型为Exception,用于指示错误条件
  v_CurrentStudents NUMBER(3);  -- HIS-101学生注册当前号
  v_MaxStudents NUMBER(3);      -- HIS-101学生注册允许的最大号

BEGIN
  /* 找出注册学生当前号和允许的最大号 */

  SELECT current_students, max_students

    INTO v_CurrentStudents, v_MaxStudents

    FROM classes

    WHERE department = 'HIS' AND course = 101;

  /* 检查学生的号 */

  IF v_CurrentStudents > v_MaxStudents THEN

/* 太多的学生注册,则触发例外处理 */

  RAISE e_TooManyStudents;

  END IF;

EXCEPTION

  WHEN e_TooManyStudents THEN

    /* 当太多的学生注册,就插入信息解释发生过错误 */

    INSERT INTO log_table (info) VALUES ('History 101 has ' || v_CurrentStudents ||

      'students: max allowed is ' || v_MaxStudents);

END;


END;

用户定义的的异常处理
可以使用RAISE_APPLICATION_ERROR来创建自己的错误处理:
RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);
其中
error_number是从-20000到-20999之间的参数;error_message是相应的提示信息,小于512字节。如:

CREATE OR REPLACE PROCEDURE Register (
p_StudentID IN students.id%TYPE,
p_Department IN classes.department%TYPE,
p_Course IN classes.course%TYPE) AS
v_CurrentStudents NUMBER;  -- 班上学生的当前号
v_MaxStudents NUMBER;      -- 班上学生的最大号

BEGIN
/* 找出学生的当前号和最大号 */
SELECT current_students, max_students
 INTO v_CurrentStudents, v_MaxStudents
FROM classes
WHERE course = p_Course
AND department = p_Department;

/* 确认另外的学生是否有足够的教室*/
IF v_CurrentStudents + 1 > v_MaxStudents THEN
RAISE_APPLICATION_ERROR(-20000, 'Can''t add more students to ' ||
p_Department || ' ' || p_Course);
END IF;

/* 加一个学生在本班 */
ClassPackage.AddStudent(p_StudentID, p_Department, p_Course);

EXCEPTION
WHEN NO_DATA_FOUND THEN
   
RAISE_APPLICATION_ERROR(-20001, p_Department || ' ' || p_Course ||
         
' doesn''t exist!');
END Register;

  
 本文Tags数据库  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:[基础]9i新特性之二安全篇
· 下一篇:oracle的高级复制
· MySql 中如何为用户设置密码
· 创建一个带密码的空数据库
· 谈ADO访问不同数据库的差别
· Access中密码管理的另一种方式
· Sybase数据库备份方案


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077