oracle中的包是一个很好的东西
比如在java中都回习惯把自己的类放到具有代表意义的包中用与逻辑上的区分
同样的oracle也如此:
包的使用也非常简单,分为包头和包体2部分
举个例子用mssql server的pubs中titles表为例子,写一个procedure来查找出价格最贵的那本书
用sql server的话 只要用一个子查询就可以搞定
select * from titles where price=(
select max(price) from titles);
在oracle中的话 先要定义包头
create or replace package Titles_pkg
as
procedure GetMaxPrice;
end;
--完成package body
create or replace package body Titles_pkg
is
procedure GetMaxPrice
is
cursor titles_cur is select title, type, price from titles;
type type_title is record
(
title titles.title%type := '',
type titles.type%type := '',
price titles.price%type := 0
);
lv_title_rec type_title;
lv_title_temp_rec type_title;
begin
open titles_cur;
loop
fetch titles_cur into lv_title_rec;
exit when titles_cur%notfound;
if lv_title_rec.price > lv_title_temp_rec.price then
lv_title_temp_rec := lv_title_rec;
end if;
end loop;
close titles_cur;
dbms_output.put_line ( lv_title_temp_rec.title );
dbms_output.put_line ( lv_title_temp_rec.type );
dbms_output.put_line ( lv_title_temp_rec.price );
end;
end;
/
--调用
begin
PKG_DEMO.GetMaxTitle;
end;
--或者
Exec PKG_DEMO.GetMaxTitle;
可能是我用惯了MS的产品,对oracle真的很不习惯,但不的不承认MS确实为开发人员做了很多事情
简化了开发步骤,不过习惯成自然,为了 2块一行的代码 奋斗中^_^