<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    開發包

    1建立包
    ?1) 建立包規范: 用于定義包的公共組建,包括常量,變量,游標,過程和函數等
    ?create or replace package emp_package is
    ? g_deptno number(3):=30;
    ? procedure add_employee(eno number,name varchar2,salary number dno number default g_deptno);
    ? procedure fire_empoyee(eno number);
    ? function get_sal(eno number) return number;
    ?end emp_package;
    ? 2) 建立包體
    ?? 用于實現包規范所定義的過程和函數。在包體中也可以單獨定義私有組件,包括變量,常量,過程和函數等。但在包體中所定義的組件只能在包內使用,而不能由其他子程序引用。
    ?? create or replace package body emp_package is
    ??? function validate_deptno(v_deptno number)
    ????? return boolean;
    ??? is
    ????? v_temp int;
    ??? begin
    ????? select 1 into v_temp from dept where deptno=v_deptno;
    ????? return true;
    ??? exception
    ????? when no_data_found then
    ?????? return false;
    ??? end;
    ??? procedure add_employee(eno number,name varchar2,salary number,dno number default g_deptno)
    ??? is
    ??? begin
    ????? if validate_deptno(dno) then
    ??????? insert into emp(empno,ename,sal,deptno)
    ???????? values(eno,name,salary,dno);
    ????? esle
    ??????? raise_application_error(-20011,'部門不存在');
    ????? end if;
    ??? exception
    ????? when dup_val_on_index then
    ??????? raise_application_error(-20011,'該雇員已存在')
    ??? end;
    ??? procedure fire_employee(eno number) is
    ??? begin
    ????? select from emp where empno=eno;
    ????? if sql%notfound then
    ???????? raise application_error(-20012,'');
    ????? end if;
    ??? end;
    ?? function get_sal(eno number) return number
    ?? is
    ???? v_sal emp.sal%type;
    ?? begin
    ???? select sal into v_sal from emp where empno=eno;
    ???? return v_sal;
    ?? exception
    ???? when no_data_found then
    ?????? raise_application_error(-200012,'');
    ?? end;
    ? end emp_package;
    ? 3) 調用包組建
    ??? -- 在同一個包內調用組建 不需要加包名前綴,直接調用
    ? create or replace paclage body emp_package is
    ??? procedure add_employee(eno number,name varchar2,salary number,dno number default g_deptno)
    ??? is
    ??? begin
    ????? validate_deptno(dno) then
    ??? exception
    ??? end;
    ?? -- 調用包公用變量
    ?? exec emp_package.g_deptno:=20
    ?? -- 調用公用過程
    ?? exec emp_package.add_employee(111,'mary,2000');
    ?? -- 調用遠程數據庫包的公用組件
    ?? exec emp_paclage.add_employee@orasrv(1116,'scott',1200);
    ?? 4) 查看包源代碼
    ?? select text from user_source where name='emp_package' and type='package';
    ?? 5) 刪除包
    ?? drop packagee emp_package;
    2 使用包重載
    ? 指多個具有相同名字的子程序,在調用的時候使用不同的參數傳遞。
    ? 1) 建立包規范
    ?? 同名過程和函數必須具有不同的輸入參數,但同名函數返回值的類型數據必須相同
    ??? create or replace package overload is
    ??? function get_sal(eno number) return number;
    ??? function get_sal(name varchar2) return number;
    ??? procedure fire_employee(eno number);
    ??? procedure fire_employee(name varchar2);
    ?? 2) 建立包體
    ??? 。。。
    3) 使用包構造過程
    ?初始化全局變量
    ?1 建立包規范
    ?? create or replace packiage emp_package
    ?? is
    ?? minsal number(6,2);
    ?? maxsal number(6,2);
    ?? procedure upd_sal(eno number,salary number);
    ?? procedure upd_sal(name varhcar2,salary number);
    ?? end;-- 定義了兩全局變量和三個公用過程
    ?? 2 建立包體
    ??? create or replace package body emp_package is
    ????? procedure add_employee(cno number,name varchar2,salary number,dno number)
    ????? is
    ????? begin
    ??????? if salary between minsal and maxsal then
    ????????? insert into emp(empno,ename,sal,deptno)
    ???????? ........
    ??? -- 構造過程,位于子程序尾部,已begin 開始已end 結束
    ???? begin
    ?????? select min(sal),max(sal) into minsal,maxsal from emp;
    ???? end;
    ????? end;
    3 調用包公用組建
    ?? 在同一次會話中第一次調用包的公用組建時,會自動執行其它構造函數,而將來調用其他組建時則不會再調用其構造過程。
    4 使用純度級別
    ?1 家里包規范
    ? create or replcace package purity is
    ? minsal number(6,2);
    ? maxsal number(6,2);
    ? function max_sal return number;
    ? function min_sal return number;
    ? pragma restrict_references(max_sal,wnps);--wnps 不能修改包的變量(不能給包的變量賦值)??????????????????????????????????????????? --wnds 不能執行dml
    ? pragma restrict_references(min_sal,wnps);--rnps 用于限制函數不能讀取包變量
    ? end;

    posted on 2006-10-11 14:46 康文 閱讀(360) 評論(0)  編輯  收藏 所屬分類: 數據庫

    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品亚洲美女久久久| 亚洲产国偷V产偷V自拍色戒| 特黄aa级毛片免费视频播放| 亚洲国产一区二区视频网站| 伊人久久免费视频| 亚洲精品天堂成人片AV在线播放| 亚洲精品乱码久久久久久蜜桃| 美女视频黄的免费视频网页| 亚洲日韩国产精品乱-久| 国产成人高清亚洲| 在线观看免费人成视频色9| 一本一道dvd在线观看免费视频| 日韩精品亚洲人成在线观看| 免费看国产曰批40分钟| 日韩精品人妻系列无码专区免费 | 白白国产永久免费视频| 国产在线播放线91免费| 亚洲人成www在线播放| 亚洲中文字幕第一页在线| 免费看黄视频网站| 东方aⅴ免费观看久久av| 亚洲国产成人精品无码区二本| 国产亚洲精品一品区99热| 成人免费网站在线观看| 中文字幕久精品免费视频| 亚洲AV无码成人精品区日韩 | 亚洲第一网站免费视频| 国产成人99久久亚洲综合精品| 成人爽A毛片免费看| 日韩人妻一区二区三区免费 | 免费av欧美国产在钱| 成av免费大片黄在线观看| 亚洲成a人片在线观看天堂无码| 亚洲天堂久久精品| 国产亚洲福利精品一区| www.亚洲精品.com| 精品免费国产一区二区| 永久免费av无码网站韩国毛片| 香蕉免费一区二区三区| 9i9精品国产免费久久| 免费播放美女一级毛片|