PL/SQL 编程(二)

1    For循环

语法:begin

for i in reverse 1..10 loop

insert into users values(i,’奥巴马‘);

end loop;

end;

注意:循环变量 i 是隐含增加的,所以无法看到

2    goto语句

goto 语句用于跳转到特定的位置去执行语句。由于goto语句会减少程序的可读性,所以一般情况下

不建议使用goto语句

3    null语句

null语句不会执行任何操作,但是可以增加程序的可读性

4    创建返回值是一个结果集的存储过程

(1) 创建一个包:

SQL> create or replace package testpackage as

type test test_cursor is ref cursor;

end testpackage;

(2) 创建存储过程

SQL> create or replace procedure sp_procedure1

(stuNo in number, param_cursor out testpackage.test_cursor) is

begin

open param_cursor for select * from emp where sutno=stuNo;

end;

5    分页

(1) sql语句

select * from

(select *,rownum NO from

(select * from emp) where rownum <=20) where rownum >=10;

(2)    创建一个包

create or replace package testpackage2 as

type test test_cursor is ref cursor;

end testpackage2;

(3)    创建存储过程

SQL> create or replace procedure procedureName2

(tableName in varchar2,                    -- 表名

pageSize in number,                        -- 每页显示的记录数

pageNow in number,                        -- 当前是第几页

pageCount out number,                    -- 总页数

p_cursor out testpackage2.test_cursor) is

v_sql varchar2(1000);

v_beginNum number := (pageNow -1)* pageSize + 1;

v_endNum number := pageNow * pageSize;

begin

v_sql := ‘select * from (select *,rownum NO from (select * from ‘|| tableName ||‘)

where rownum <= ‘|| v_endNum ||‘) where rownum >= ‘|| v_beginNum;

open p_cursor for v_sql;

-- 创建一个sql语句

v_sql := ‘select count(*) from ‘ || tableName;

-- 执行sql语句,将结果保存

execute immediate v_sql into rows;

if mod(rows,pageSize) = 0

then pageCount := rows / pageSize;

else

pageCount := rows / pageSize + 1;

end if;

-- 关闭游标

close p_cursor;

end;

6    异常处理

(1) 预定义异常

(2) 非预定义异常

(3) 自定义异常

例1

SQL> declare v_name emp.ename%type;

begin

select ename into v_name from emp where empno = &no;

dbms_output.put_line(‘名字:‘ || v_name);

exception

when no_data_found

then dbms_output.put_line(‘编号没有!‘);

end;

预定义异常

a case_not_found

在编写case 语句时,如果在when子句中没有包含必须的条件分支(没有符合条件的),就会触发case_not_found异常

b cursor_already_open

当重新打开已经打开的游标时触发此异常

c dup_val_on_index

在唯一索引所对应的列上插入重复值时触发此异常

d invalid_cursor

当试图在不合法的游标上进行操作时触发此异常

e invalid_number

当输入的数字无效时触发此异常

f too_many_rows

当返回值不止是一条记录时触发此异常

g zero_divide

当进行 x/0,即除数为零的操作时触发此异常

h value_error

当进行赋值操作时,如果变量的长度不足以存储实际数据时触发此异常

i login——denide

当用户非法登录时会触发此异常

j not_logged_on

如果用户没有登录就执行DML操作,就会触发此异常

k storage_error

如果超出了内存空间,就会触发此异常

l timeout_on_resource

当Oracle等待资源时,如果发生超时情况,就会触发此异常

自定义异常

SQL> create or replace procedure procedureName2(sp_empNo number) is

MyExpception Exceptiom;        -- 自定义一个异常

begin

update emp set sal = sal * 1.2 where empno = &no;

if sql%notfound then

raise MyExpception;            -- 触发自定义异常

end if;

exception

when no_data_found

then dbms_output.put_line(‘没有更新数据!‘);

end;

PL/SQL 编程(二),布布扣,bubuko.com

时间: 2024-08-04 08:12:54

PL/SQL 编程(二)的相关文章

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]

ORACLE PL/SQL编程之八(二): 把触发器说透

例2:创建DML语句行级触发器.当对emp表执行INSERT, UPDATE, DELETE 操作时,它自动更新dept_summary 表中的数据.由于在PL/SQL块中不能直接调用DDL语句,所以,利用ORACLE内置包DBMS_UTILITY中的EXEC_DDL_STATEMENT过程,由它执行DDL语句创建触发器. BEGIN  DBMS_OUTPUT.PUT_LINE('插入前');  Disp_dept_summary();  DBMS_UTILITY.EXEC_DDL_STATEM

ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE PL/SQL编程之八:把触发器说透 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的.   本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID 6.3.4 

【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人品牌. 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在.经典”的写ORACLE PL/SQL编程的文章-! 觉得对你有帮助,请留言与猛点推荐,谢谢. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) 本篇主要内容如下:第一章 PL/S

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的. 本篇主要内容如下: 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ——通过知识共享树立个人品牌. 继上五篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不

[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下) ——通过知识共享树立个人品牌. 继上六篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程之四:把游标说透(

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之

ORACLE PL/SQL编程总结(一)

----------PL/SQL 程序设计简介----------- 1.1   SQL与PL/SQL 1.1.1   什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写.PL/SQL是对SQL语言存储过程语言的扩展.从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL.它现在已经成为一种过程处理语言,简称PL/SQL.目前的PL/SQL包括两部分,一部分是数据库引擎部分:另一部分是可嵌入到许多产