心湖里的一條小魚——我的Java家園

          沒事就說說Java;有事就通過Java編程賺點生活費。
          posts - 7, comments - 2, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2006年7月14日

          1,一個比較復雜的內聯結查詢:??
          ?? 比如需要查詢雇員超過某個特定人數(比如四個人)的部門ID以及部門人數的查詢法,還是以Scott用戶下的dept和emp表為例:
          select count(d.deptno) as emp_count,d.deptno from dept d inner join emp e on d.deptno = e.deptno group by d.deptno having count(e.empno)>4;

          這里體現了那連接以及group by和having配合起來的用法。

          posted @ 2006-07-16 11:19 心湖里的一條魚 閱讀(284) | 評論 (0)編輯 收藏

          待寫

          posted @ 2006-07-16 11:13 心湖里的一條魚 閱讀(269) | 評論 (0)編輯 收藏

          1,手工重新編譯視圖:
          ?? alter view emp_dept compile;
          2,手工重新編譯存儲過程和函數;
          ??alter procedure p_prodname compile;
          3,手工重新編譯包:
          ???ALTER PACKAGE acct_mgmt COMPILE BODY;
          ??ALTER PACKAGE acct_mgmt COMPILE PACKAGE;

          posted @ 2006-07-14 15:32 心湖里的一條魚 閱讀(456) | 評論 (0)編輯 收藏

          約束延期是一個對主鍵、唯一鍵等約束進行延遲檢查的功能。可以使用該功能將約束檢查延遲到事務提交時,而不是在進行DDL操作之后立即進行檢查。所以對約束檢查也有這兩個選項:延遲和立即。
          ?比如對于表t_test
          ?Name Type???????? Nullable Default Comments
          ---- ------------ -------- ------- --------
          NAME VARCHAR2(12) Y????????????????????????
          AGE? NUMBER(5)??? Y
          ????????????????????????

          通過這個語句增加一個延遲檢查的主鍵約束:
          alter table t_test add constraint pk_name primary key (name) DEFERRABLE INITIALLY DEFERRED;

          執行如下操作:
          SQL>insert into t_test values ('Tom',32);

          1 row inserted

          SQL> commit;

          Commit complete

          SQL> select * from t_test;

          NAME??????????? AGE
          ------------ ------
          Tom??????? 32

          SQL> insert into t_test values ('Tom',32);

          1 row inserted

          SQL> commit;

          commit

          ORA-02091: 事務處理已重算
          ORA-00001: 違反唯一約束條件 (SCOTT.PK_NAME)


          這個唯一約束條件的檢查時在commit時候進行檢查的,而不是在insert了違反約束條件的值之后馬上進行檢查。

          posted @ 2006-07-14 14:41 心湖里的一條魚 閱讀(1328) | 評論 (1)編輯 收藏

          1,Oracle是可以通過視圖來修改Base table的。所謂base table就是用來構建視圖的表,也就是視圖的數據來源表。但是這種修改是有條件的。比如:
          ???create view v_emp as select empno,ename,job,deptno from emp where deptno=10 with check option constraint emp_cnst;
          ?? 如果有這個限制,那么通過視圖
          v_emp 插入數據的deptno字段的值必須是10,否則就會報“ORA-01402: 視圖 WITH CHECK OPTIDN 違反 where 子句”的異常。

          2,聯結視圖:
          ?? create view dept1_staff as select e.ename, e.empno, e.job, d.deptno, d.dname?from emp e,dept d where e.deptno in (10,30) and e.deptno = d.deptno;
          ? 將兩個表的數據聯結起來,看起來應該是一個內聯結(Inner joint)。
          ? 對于聯結視圖(Joint view)的修改規則稍顯復雜,設計到所謂key_preserved table的概念。通過聯結視圖來修改基表,只有那些key_preserved 的表才能被修改。上述創建視圖語句中emp和dept通過deptno進行聯結構成視圖時,emp就是key_preserved 表,而dept不是。為什么?因為在dept1_staff 中empno的值唯一的而deptno不是唯一的。所以emp是key_preserved 而dept不是。因此只能通過該視圖來修改emp,而不能修改dept的數據。

          3,Oracle視圖非常強大的功能之一在于其可以創建一個帶有錯誤的視圖。比如說視圖里的字段在基表里不存在,該視圖仍然可以創建成功,但是非法的且無法執行。當基表里加入了該字段,或者說某個字段修改成視圖里的該字段名稱,那么視圖馬上就可以成為合法的。這個功能很有意思。
          例子:
          ? 創建基表:?create table v_test (name varchar2(32),age number(12));
          ? 創建帶錯誤的視圖:
          ?? create force view view_test as select name,age,address from v_test;(注意加上force選項)
          ? 由于address字段在v_test里不存在,所以會報warning: View created with compilation errors的警告,而且執行select * from view_test;時會報“ORA-04063: view "SCOTT.VIEW_TEST" 有錯誤”的異常。
          但是如果在v_test里加上address字段,那么視圖就會合法。
          對基表進行修改:
          ?alter table v_test add (address varchar2(128));

          現在再執行select * from view_test;就會執行成功了。

          posted @ 2006-07-14 10:37 心湖里的一條魚 閱讀(3219) | 評論 (1)編輯 收藏

          看Oracle的英文幫助文檔斷斷續續有4年時間了??傮w感覺是淺顯易懂,沒有多少深奧的技術術語。所以建議對Oracle感興趣的哥們最好是看英文幫助文檔。最全面,最權威。這四年時間,經歷了幾家公司,職位一直做到分管軟件研發的副總經理(當然不是很大公司),期間還要寫博士論文和博士答辯,兒子出生,畢業找工作,買房裝修房子,搬家。呵呵,一想起來這幾年過的還真是很充實?,F在是除了車沒有,其他該有的都有了。很滿足滴說^_^。
          好了言歸正傳,前幾年寫了近50頁的Oracle學習筆記,在一次裝機子的過程中全丟了,傷心欲絕,不說了。從現在開始,就借BlogJava的地兒,重新開始Oracle筆記的記錄。

          posted @ 2006-07-14 10:19 心湖里的一條魚 閱讀(261) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 葫芦岛市| 绥棱县| 甘肃省| 邹城市| 临夏县| 九江县| 莱州市| 台湾省| 大丰市| 色达县| 旬邑县| 巴林右旗| 德昌县| 万荣县| 台山市| 纳雍县| 呈贡县| 安龙县| 习水县| 华阴市| 化州市| 平阳县| 新绛县| 乐都县| 涪陵区| 灵璧县| 高碑店市| 米泉市| 洞头县| 定边县| 鹿邑县| 中卫市| 亳州市| 喜德县| 泽州县| 来凤县| 夹江县| 长阳| 容城县| 苏州市| 南宁市|