网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.2Gb or Not 2Gb.
.Oracle 8x中监控sysdba角色用户登.
.Oracle X计划:应用集成架构.
.Oracle failsafe与rac两者之间的.
.Oracle 发布免费开发工具 Raptor.
.自动运行管理任务──作业.
.Oracle RAC中Srvctl命令详细说明.
.对Oracle的Web运营所进行的幕后观.
.六步搞定 Oracle 透明网关环境的.
.硬件问题导致Oracle痛苦不堪.
.Data Mining Technologies, Tech.
.Oracle中压缩数据节省空间和提高.
.Installing Oracle 10G on SuSE .
.通过ORACLE APPLICATION SERVER实.
.Oracle816中如何启动EnterpriseM.
.在linux上单机模拟Oracle 10g RA.
.Oracle 10g Release2新功能之变化.
.程序,任务与承认.
.包含复制环境的数据库迁移.
.Oracle兔死狗烹?(zt).

PL/SQL的一些语法

发表日期:2008-2-9


写一些关于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;
上一篇:如何查看什么时间有哪些数据库对象结构被修改过 人气:1256
下一篇:oracle的高级复制 人气:756
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐