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

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

          2005年12月30日

          1,一個比較復(fù)雜的內(nèi)聯(lián)結(jié)查詢:??
          ?? 比如需要查詢雇員超過某個特定人數(shù)(比如四個人)的部門ID以及部門人數(shù)的查詢法,還是以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;

          這里體現(xiàn)了那連接以及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,手工重新編譯存儲過程和函數(shù);
          ??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)編輯 收藏

          約束延期是一個對主鍵、唯一鍵等約束進行延遲檢查的功能。可以使用該功能將約束檢查延遲到事務(wù)提交時,而不是在進行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;

          執(zhí)行如下操作:
          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: 事務(wù)處理已重算
          ORA-00001: 違反唯一約束條件 (SCOTT.PK_NAME)


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

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

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

          2,聯(lián)結(jié)視圖:
          ?? 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;
          ? 將兩個表的數(shù)據(jù)聯(lián)結(jié)起來,看起來應(yīng)該是一個內(nèi)聯(lián)結(jié)(Inner joint)。
          ? 對于聯(lián)結(jié)視圖(Joint view)的修改規(guī)則稍顯復(fù)雜,設(shè)計到所謂key_preserved table的概念。通過聯(lián)結(jié)視圖來修改基表,只有那些key_preserved 的表才能被修改。上述創(chuàng)建視圖語句中emp和dept通過deptno進行聯(lián)結(jié)構(gòu)成視圖時,emp就是key_preserved 表,而dept不是。為什么?因為在dept1_staff 中empno的值唯一的而deptno不是唯一的。所以emp是key_preserved 而dept不是。因此只能通過該視圖來修改emp,而不能修改dept的數(shù)據(jù)。

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

          現(xiàn)在再執(zhí)行select * from view_test;就會執(zhí)行成功了。

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

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

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

          ??????? 以前經(jīng)常看別人寫B(tài)log,自己當看客,現(xiàn)在自己也開始做博客了。首先說一下名稱來源,心湖是我的一個杜撰,是我用來指代母校中央那個小水坑的,那個小水坑的樣子從圖書館或山上看像一個心臟的形狀,所以我給她取個名字叫心湖(好像也是從別人那里聽說的,記不清了)。說實話,我對母校的感情是非常矛盾的,我從她那里受到過傷害,也從她那兒得到過幸福和溫暖。但總是有一種割舍不了的情感,畢竟我和妻子是在這里認識的,她也在這所學(xué)校任教。我希望自己永遠是心湖里的一條小魚,自由遨游。于是我也將自己的博客取名“心湖的Java家園”。

          posted @ 2005-12-30 16:09 心湖里的一條魚 閱讀(222) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 长沙市| 黄平县| 镇赉县| 色达县| 临西县| 策勒县| 丰城市| 临颍县| 疏附县| 永春县| 湘阴县| 绥芬河市| 聂拉木县| 安西县| 定兴县| 陈巴尔虎旗| 祁连县| 汉阴县| 伊宁市| 银川市| 安塞县| 景洪市| 武冈市| 龙游县| 中宁县| 贵州省| 利津县| 龙岩市| 叶城县| 顺昌县| 什邡市| 保亭| 株洲市| 波密县| 墨竹工卡县| 肥乡县| 南昌市| 高密市| 临澧县| 孝感市| 彭州市|