设为首页 加入收藏

TOP

oracle初学知识点总结(四)
2014-11-24 02:30:51 来源: 作者: 【 】 浏览:5
Tags:oracle 初学 知识点 总结
if v_sal >=300 then
update mytable set sal=v_sal+150 where name=name1;
elsif v_sal>=200 then
update mytable set sal=v_sal+100 where name=name1;
else
update mytable set sal=v_sal+50 where name=name1;
end if;
end;
循环语句:
loop结构:
create or replace procedure p_add(name1 varchar2,passwd1 varchar2,sal number) is
v_num number:=1;
begin
loop
insert into mytable values(name1 ,passwd1,sal);
exit when v_num=3;--结束条件
v_num:=v_num+1;
end loop;
end;
--使用while循环;
create or replace procedure p_add(name1 varchar2,passwd1 varchar2,sal number) is
v_num number:=1;
begin
while v_num<=3
loop
insert into mytable values(name1 ,passwd1,sal);
v_num:=v_num+1;
end loop;
end;
--for循环(不建议使用)
begin
for i in reverse 1..10 loop
insert into users values(i,'gao');
end loop;
end;
--顺序控制语句
goto语句(一般不建议使用)老是乱跳;
null语句;不会执行任何操作,并且会直接将控制传递到下一条语句;
---分页过程前面
-- 1.创建表
create table book(bookId number,bookName varchar2(50),bookPubl varchar2(50));
--2.创建存储过程(只有输入参数)
create or replace procedure p_splitpage(bookId in number,bookName in varchar2,bookPubl in varchar2) is
begin
insert into book values(bookId,bookName,bookPubl);
end;
--3.创建存储过程(有输出参数)
create or replace procedure p_splitpage1(bookId1 in number,bookName1 out varchar2,bookPubl1 out varchar2) is
begin
select bookName ,bookPubl into bookName1,bookPubl1 from book where bookId=bookId1;
end;
--4.创建存储过程(输出参数是一个列表)
--创建一个包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
--创建过程
create or replace procedure p_splitpage2(name1 in varchar2,c_cursor out testpackage.test_cursor) is
begin
open c_cursor for select * from mytable where name=name1;
end;
分页:(输入表名,每页显示的记录数,当前页,返回总记录数,总页数,和返回的结果集)
--分页的模板sql
select * from (select rownum rn,t.* from (select * from mytable) t where rownum<=10) where rn>=6;
--创建一个包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
--定义存储过程
create or replace procedure p_pagesplit(
tableName in varchar2, --表名
pageSize in number, --每页显示的记录数
pageNow in number, --当前页
myRows out number, --返回的总记录数
myPageCount out number, --总页数
p_cursor out testpackage.test_cursor --返回的结果集
) is
--定义一个sql语句
v_sql varchar2(1000);
v_begin number:=(pageNow-1)*pageSize+1;
v_end number:=pageNow*pageSize;
begin
v_sql:='select * from (select rownum rn,t.* from (select * from '||tableName||') t where rownum<='||v_end||') where rn>='||v_begin;
--游标和sql关联 返回结果集
open p_cursor for v_sql;
--返回总记录数
v_sql:='select count(*) from '||tableName;
execute immediate v_sql into myRows;
--返回总页数;
if mod(myRows,pageSize)=0 then
myPageCount:=myRows/pageSize;
else
myPageCount:=myRows/pageSize+1;
end if;
if p_cursor%notfound then
close p_cursor;
end if;
end;
异常处理:
declare
v_name mytable.name%type;
begin
select name into v_name from mytable where name=&a;
exception
when no_data_found then
dbms_output.put_line('数据未找到!');
end;
1.case_no_found --没有定义这种情况。
2.cursor_already_open --游标重复打开
3.invaild_cursor --游标没有打开,打开关闭的游标。
4.invaild_number --sal=sal+'100'
5.too_many_rows --返回的记录数不止一行
6.zero_divide --2/0
7.value_error --v_name varchar2(1),太小了
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2014年第1季度OraclePSU更新(For1.. 下一篇oracle知识点小节2(字符串中包含..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: