<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 procedure out_time
    ? is
    ? begin
    ??? dbms_output.put_line(systimestamp);
    ? end;
    ? a 使用execute 命令調用過程
    ?? set? serveroutput on
    ?? exec out_time;
    ? b 使用call 命令調用過程
    ?? set serveroutput on
    ?? call out_time();
    ?2) 建立過程:帶有in參數 默認為輸入參數,另外也可以使用in 關鍵子顯示的定義
    ?? create or replace procedure add_employee
    ?? (eno number,name varchar2,sal number,
    ??? job varchar default 'clerk',dno number)
    ?? is
    ?? e_integrity exception;
    ?? pragma exception_init(e_intgegrity,-2291);
    ?? begin
    ??? insert into emp(empno,ename,sal,job.deptno)
    ????? values(eno.name,sal,job,dno);
    ??? exception
    ????? when dup_val_on_index then
    ??????? raise_application_error(-20000,'雇員號不能重復');
    ????? when e_integrity then
    ??????? raise_application_error(-20001,'部門號不存在');
    ???
    調用
    ?? exec add_employee(111,'clark',200,'manager',10);
    ?? 3 建立過程,帶有out 參數
    ??? create or replcace procedure query_employee
    ??? (eno number,name out varchar2,salary out number)
    ??? is
    ??? begin
    ????? select ename,sal,into name,salary from emp where empno=eno;
    ??? exception
    ????? when no_data_found then
    ??????? raise_application_error(-20000,'G該雇員不存在');
    ??? end;
    ???
    ??? 調用
    ??? var name varchar2(10)
    ??? var salary number
    ??? exec query_employee(7788,:name,:salary);
    ??? print name,salary;
    ??? 4 建立過程,帶有in out 參數
    ??? create or replace procedure compute
    ??? (num1,in out number,num2 in out number)
    ??? is
    ?????? v1 number;
    ?????? v2 number;
    ??? begin
    ????? v1:=num1/num2;
    ????? v2:=mod(num1,num2);
    ????? num1:=v1;
    ????? num2:=v2;
    ??? end;?
    ???
    ??? 調用
    ??? var n1 number
    ??? var n2 number
    ??? exec :n1:=100;
    ??? exec :n2:=30
    ??? exec compute(:n1,:n2)
    ??? print n1 n2
    ??? 5) 為參數傳遞變量和數據 位置傳遞,名稱傳遞,組合傳遞
    ??? create or replace procedure add_dept
    ??? (dno number,dname varchar2 default null,loc varchar default null)
    ??? is
    ??? begin
    ????? insert into dept values(dno.dname,loc);
    ??? end;
    ??? -- 位置傳遞
    ???? exec add_dept(50,'sales','new york');
    ???? exec add_dept(60);
    ???? exec add_dept(70,'admin');
    ??? -- 名稱傳遞
    ???? exec add_dept(50,loc=>'new york');
    ???? exec add_dept(60,dname=>'sales',loc=>'new york');
    ?? 6) 顯示當前用戶的所有程序及其源代碼
    ???? select text from user_source where name='add_dept';
    ?? 7) 刪除過程
    ???? drop procedure add_dept;
    2 開發函數
    ? 可以在sql語句和其他子過程中執行。
    ? 1 建立函數,不帶任何參數
    ? create or replace function get_user
    ? return varchar2
    ? is
    ??? v_user varchar2(100);
    ? begin
    ??? select username into v_user from user_users;
    ??? return v_user;
    ??? end;
    ? --使用變量接收函數返回值
    ?? var v2 varchar2(100)
    ?? exec :v1:=get_user
    ?? print v1;
    ?-- 在sql 語句中直接調用函數
    ?? select get_user from dual;
    ?-- 使用dbms_output 調用函數
    ?? set serveroutput on
    ?? exec dbms_output.put_line('get_user');
    ?2) 建立函數,帶有in 參數
    ?? create or replace function get_sal(name in varchar2)
    ?? reutnr number
    ?? as
    ?? v_sal emp.sal%type;
    ?? begin
    ???? select sal into v_sal from emp where upper(ename)=upper(name);
    ???? return v_sal;
    ?? exception
    ???? when no_data_found then
    ?????? raise_application_error(-20000,'employee does not exist');
    ?? end;
    ?3) 建立函數,帶有out 參數
    ?? create or replace function get_info
    ?? (name varchar2,title out varchar2)
    ?? return varchar2
    ?? as
    ???? deptname dept.dname%type;
    ?? begin
    ???? select a,job,b,dname into title,deptname from emp a,dept b
    ???? where a.deptno=b.deptno
    ???? and upper(a.ename)=uppder(name);
    ???? return deptname;
    ?? end;
    ?? var job varchar2(20)
    ?? var dname varchar2(20)
    ?? exec :dname:=get_info('scott',job);
    ?? print dname job

    ?4) 帶有 in out 參數
    ? create or replace function result
    ? (num1,number,num2 in out nu8mber)
    ? return number
    ? as
    ??? v_result number(6);
    ??? v_remainder number;
    ? begin
    ??? v_result:=num1/num2;
    ??? v_remainder:=mod(num1,num2);
    ??? num2:=v_remainder;
    ??? retrun v_result;
    ? exception
    ??? when zero_divide then
    ?????? raise_application_error(-20000,'zero divied');
    ? end;
    ?5) 函數調用的限制
    ? -- 在sql 語句中只能調用存儲函數
    ? -- 在sql 語句中只能調用帶有輸入參數in ,而不能有輸出參數out 和in out 參數的函數
    ? -- 在sql 語句中調用的函數的參數必須是標準的sql 數據類型,不能是pl/sql 所特有的數據類型
    ? -- 在sql 語句中調用的函數不能包含insert,update 和delete
    ?6) 查看源代碼
    ? set pagesize 40
    ? select text form user_source where name='result';
    ?7) 刪除函數
    ? drop function result;
    ?3 管理子程序
    ? 1) 列出當前用戶的子程序
    ?? select object_name,created,status form user_objects
    ?? where object_type in ('procedure','function');
    ? 2)列出子程序源代碼
    ?? select text from user_sorce where name='raise_salary'
    ? 3)類出子程序編譯錯誤
    ??? -- show errors
    ??? --使用數據字典user_errors? 確定錯誤原因和位置
    ???? select line||'/'||position as "line/col",text error
    ???? from user_errors where name='raise_salary';
    ?? 4) 列出對象的依賴關系
    ??? -- 使用 user_dependenciess 確定直接依賴關系
    ??? select name,type from user_dependencies
    ??? where referenced_name='emp'
    ??? -- 使用 deptree 和 ideptree 確定依賴和見解依賴關系
    ??? select nested_level,name,type from deptree;
    ?? 5) 重新編譯子程序
    ???? 當被應用對象的結構被修改以后,就會將相關依賴對象轉變為無效invalid ,需要重新編譯
    ???? 1
    ???? alter table emp add remark varchar2(100);
    ???? 2
    ???? select object_name,object_type from user_objects
    ???? where status='invalid'
    ???? 3
    ???? alter procedure add_employee compile;
    ???? alter view dept10 compile;
    ???? alter function get_info compile;
    ?????
    ??

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

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

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产成人在线视频| 国产高清在线免费| 永久在线观看免费视频| 9久热这里只有精品免费| 黄色网址免费在线观看| 羞羞视频免费网站在线看| WWW免费视频在线观看播放| 4hu四虎免费影院www| 香蕉免费一级视频在线观看| 久久国产福利免费| a级毛片免费观看视频| 精品国产污污免费网站| 日韩午夜理论免费TV影院| 98精品全国免费观看视频| 久久久久高潮毛片免费全部播放 | 成人亚洲性情网站WWW在线观看 | 99精品视频在线免费观看| 99re在线视频免费观看| 在线a免费观看最新网站| 国产免费看JIZZ视频| 岛国片在线免费观看| 日韩高清在线高清免费| 免费看男女下面日出水视频| 亚洲国产精品嫩草影院久久| 亚洲小说区图片区另类春色| 久久亚洲国产欧洲精品一| 亚洲最大黄色网站| 亚洲精品无码久久久久秋霞| 老司机亚洲精品影院在线观看| 羞羞漫画页面免费入口欢迎你 | 亚洲日韩乱码久久久久久| 亚洲中文字幕一二三四区苍井空| 亚洲男人的天堂网站| 人妻仑刮八A级毛片免费看| 四虎影视无码永久免费| 无码人妻精品中文字幕免费东京热| 影音先锋在线免费观看| 久久久久久A亚洲欧洲AV冫| 亚洲伊人久久大香线蕉苏妲己| 亚洲一区精彩视频| 一级做a爰片性色毛片免费网站|