斷點

          每天進步一點點!
          posts - 174, comments - 56, trackbacks - 0, articles - 21

          視圖:一個虛表,也是一個子查詢,是存儲在數據字典里的一條select語句。
          視圖:基于一個表或多個表或視圖的邏輯表,本身不包含數據,通過它可以對表里面的數據進行查詢和修改,視圖基于的表稱為基表。


          視圖的優點:
          1、對數據庫的訪問,可以有選擇性的選取數據庫里的一部分信息,整張表的信息不對外開放。2.用戶通過簡單的查詢可以從復雜查詢中得到結果。
          視圖的缺點:
          如果一個表的結構改了,相應的視圖如果用到了該表的字段,也要進行修改,增加維護工作量。


          簡單視圖:只從單表里獲取數據,不包含函數和數據組,可以實現DML操作。
          復雜視圖:從多表獲取數據,包含函數和數據組,不可以DML操作。

          視圖的創建:
          CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
          [(alias[, alias]...)]
          AS subquery
          [WITH CHECK OPTION [CONSTRAINT constraint]]
          [WITH READ ONLY]

          其中:
          OR REPLACE:若所創建的試圖已經存在,ORACLE自動重建該視圖;
          FORCE:不管基表是否存在ORACLE都會自動創建該視圖;
          NOFORCE:只有基表都存在ORACLE才會創建該視圖:
          alias:為視圖產生的列定義的別名;
          subquery:一條完整的SELECT語句,可以在該語句中定義別名;
          WITH CHECK OPTION :插入或修改的數據行必須滿足視圖定義的約束;
          WITH READ ONLY :該視圖上不能進行任何DML操作。


          例如:
                 CREATE OR REPLACE VIEW dept_sum_vw
                         (name,minsal,maxsal,avgsal)
                 AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
                 FROM    emp e,dept d
                 WHERE e.deptno=d.deptno
                 GROUP BY d.dname;
          查詢視圖:select * from user_views;
          修改視圖:通過OR REPLACE 重新創建同名視圖即可。
          刪除視圖:DROP VIEW VIEW_NAME;

          視圖的定義原則:
          1.視圖的查詢可以使用復雜的SELECT語法,包括連接/分組查詢和子查詢;
          2.在沒有WITH CHECK OPTION和 READ ONLY 的情況下,查詢中不能使用ORDER BY 子句;
          3.如果沒有為CHECK OPTION約束命名,系統會自動為之命名,形式為SYS_Cn;
          4.OR REPLACE選項可以不刪除原視圖便可更改其定義并重建,或重新授予對象權限。

          視圖上的DML操作,應遵循的原則:
          1.簡單視圖可以執行DML操作;
          2.在視圖包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字時不能刪除數據行;
          3.在視圖不出現下列情況時可通過視圖修改基表數據或插入數據:
             a.視圖中包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字;
             b.使用表達式定義的列;
             c .ROWNUM偽列。
            d.基表中未在視圖中選擇的其他列定義為非空且無默認值。


          WITH CHECK OPTION 子句限定:
          通過視圖執行的INSERTS和UPDATES操作不能創建該視圖檢索不到的數據行,因為它會對插入或修改的數據行執行完整性約束和數據有效性檢查。
          例如:
                     CREATE OR REPLACE VIEW vw_emp20
                     AS SELECT * FROM emp
                     WHERE deptno=20
                     WITH CHECK OPTION constraint vw_emp20_ck;
                    視圖 已建立。
                      查詢結果:
                     SELECT empno,ename,job FROM vw_emp20;
                    EMPNO                ENAME                JOB
          ---------------------           --------------          -------------
                        7369                 SMITH                CLERK
                        7566                 JONES               MANAGER
                        7902                 FORD                ANALYST
                    修改:
                          UPDATE vw_emp20
                          SET        deptno=20
                          WHERE   empno=7902;
                     將產生錯誤:
                         UPDATE vw_emp20
                                        *
                         ERROR 位于第一行:
                         ORA-01402:視圖WITH CHECK OPTION 違反WHERE 子句

          posted @ 2010-07-17 11:03 斷點 閱讀(235) | 評論 (0)編輯 收藏

          索引:--像字典里面的索引。

          表建立索引后在插入數據時,一要把數據寫入表里,二要把該數據記入索引里面,因此查詢效率高、但插入效率低。

          create index idx_stu_email on stu(email,class);  --組合索引,查詢效率高。
          drop index idx_stu_email;
          select * from user_indexes; -- 查詢索引

          posted @ 2010-07-17 10:54 斷點 閱讀(209) | 評論 (0)編輯 收藏

          Oracle的數據庫對象分為五種:表,視圖,序列,索引和同義詞。

          select * from  user_tables  -- 當前用戶下有多少張表
          select * from  user_views  -- 當前用戶下有多少張視圖
          select * from user_sequences; --查詢序列
          select * from user_indexes; -- 查詢索引

          select * from  user_constraints  -- 當前用戶下有多少約束
          select * from  dictionary  --數據字典表的表

          posted @ 2010-07-17 10:52 斷點 閱讀(211) | 評論 (0)編輯 收藏

          DDL(data definition language):DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定義或改變表(TABLE)的結構,數據類型,表之間的鏈接和約束等初始化工作上,他們大多在建立表時使用。

          數據類型:VARCHAR2(50)最大4K(4096字節)、CHAR(1)最大2k、NUMBER(10,6)、NUMBER(6)、DATE、
          LONG 變長字符串,最大長度達2G。

           

          約束條件有5個:非空、唯一、主鍵、外鍵、check。

          create table stu
          (
          id number(6), --primary key
          name varchar2(20) constraint stu_name_nn not null, --stu_name_nn別名
          sex number(1),
          age number(3),
          sdate date,
          grade number(2) default 1,
          class number(4), --references class(id)
          email varchar2(50),
          --email varchar2(50) unique  --字段級約束,不能有重復值
          constraint stu_name_email_uni unique(name,email), --表級約束
          constraint stu_id_pk primary key(id),        --表級約束
          constraint stu_class_fk foreign key(class) references class(id) --被參考字段必須是主鍵
          );

          create table class
          (
          id number(4) primary key,
          name varchar2(20) not null
          )


          alter table stu add(addr varchar2(100)); --對已存在的表新增字段
          alter table stu modify(addr varchar2(150)); --對字段修改
          alter table stu drop (addr); --刪除一個字段
          alter table stu drop constraint stu_class_fk;
          delete from class;
          drop table class;

          posted @ 2010-07-17 09:43 斷點 閱讀(238) | 評論 (0)編輯 收藏

          SQL語言共分為四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL。

          DML(data manipulation language):它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來對數據庫里的數據進行操作的語言。

          conn sys/sys as sysdba;
          drop user pcisv6 cascade;
          exp --備份scott用戶下的表
          --創建用戶,identified為認證相當是密碼,quota配額就是分配空間。
          create user pcisv6 identified by 11 default tablespace core6 quota 10M on corev6
          grant create session,create table,create view to pcisv6;   --授權,session是用于登錄的
          imp --導入scott用戶下的表

          SELECT:
          select rownum r,ename from emp;    --rownum行數,目前只能使用<、<=, 而沒有直接>、=的寫法。
          select ename, sal     --求薪水最高的前5人
           from (select ename, sal from emp order by sal desc)
           where rownum <= 5;

          --求薪水最高的前6到10人
          select ename,sal,rownum r from emp order by sal desc; --r 排序混亂
          select ename,sal,rownum r from (select ename,sal from emp order by sal desc); --此時r序號按新表排序
          select ename, sal    -- 此處為結果
            from (select ename, sal, rownum r
                    from (select ename, sal from emp order by sal desc))
           where r >= 6
             and r <= 10;


          INSERT:
          insert into dept values(50,'game','bj');    --整條記錄
          rollback;
          create table dept2 as selet * from emp; --創建dept2表
          insert into dept2(deptno,dname) values(60,'game2');    --有選擇的字段插入
          insert into dept2 select * from dept;    --插入一個表, 2個表結構一樣


          UPDATE:
          update emp2 set sal=sal*12,ename=ename||'-' where deptno=10;

          DELETE:
          delete from dept2 where deptno<25;
          rollback;

          TRANSACTION:
          transaction 起始一條dml語句,在commit、rollback時完成。
          transaction 在執行dml后,在其后有執行了ddl、dcl時,事務自動提交。
          在正常退出exit時,事務自動提交。
          在非正常退出時,事務回滾。

          ------------------------------------------------------------
          例子:
          有3個表S,C,SC
          S(SNO,SNAME)代表(學號,姓名)
          C(CNO,CNAME,CTEACHER)代表(課號,課名,教師)
          SC(SNO,CNO,SCGRADE)代表(學號,課號成績)
          問題:
          1,找出沒選過“黎明”老師的所有學生姓名。
          2,列出2門以上(含2門)不及格學生姓名及平均成績。
          3,即學過1號課程有學過2號課所有學生的姓名。
          請用標準SQL語言寫出答案,方言也行(請說明是使用什么方言)。

          1.
          select sname froms
            join sc on (s.sno = sc.sno)
            join c(c.cno = sc.cno)
           where c.cteacher <> 'liming';
          2.
          select sname
           where sno in (select sno
                           from sc
                          where scgrade < 60
                          group by sno
                         having count(*) >= 2);
          3.
          select sname
           where sno in (select sno
                           from sc
                          where cno = 1
                            and sno in (select sno from sc where cno = 2));


          posted @ 2010-07-11 15:43 斷點 閱讀(241) | 評論 (0)編輯 收藏

          錯誤原因:在Oracle新建了一個表,名為“QueryHistory",用來保存用戶的查詢記錄,這時,再用"Select * from QueryHistory"來查詢,報 "ORA-00942: 表或視圖不存在 "。

          錯誤分析:利用Google搜索找到了原因,
           oracle是大小寫敏感的,如果定義表名稱或列名稱的時候沒有用引號引起來的話 oracle會把他們全部轉換為大寫,這時就會出現錯誤了。

          解決方法:將語句改為"Select * from "QueryHistory" 或是語句全部大寫。

          posted @ 2010-07-10 17:36 斷點 閱讀(643) | 評論 (0)編輯 收藏

          PCIS[2010-07-08 18:08:02,531]>>ERROR>> [BizControllerImpl異常堆棧{事務ID/用戶代碼}:[1278583679437325]/[00000210]:com.fwk.service.BusinessServiceException: com.fwk.dao.DaoException: 保存保單,saveOrUpdatePolicy()時出錯; nested exception is org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
           at com.pcis.policy.dm.PolicyDAO.saveOrUpdatePolicy(PolicyDAO.java:193)
           at com.pcis.policy.app.newbusiness.service.PolicyAppService.savePolicy(PolicyAppService.java:343)
           at com.pcis.policy.app.underwrite.bm.UnderwriteBM.submitUnderwrite(UnderwriteBM.java:139)
           at com.pcis.policy.app.underwrite.action.UnderwriteBizAction.submitUnderwrite(UnderwriteBizAction.java:548)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
           ...
          Caused by: org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
           at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:624)
           at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
           at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:379)
           at org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:841)
           at com.fwk.dao.BaseDao.flush(Unknown Source)
           at com.pcis.policy.dm.PolicyDAO.saveOrUpdatePolicy(PolicyDAO.java:174)
           ... 80 more
          Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (PCISV6_TS.UI_PLY_CVRG) violated
           at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:602)
           at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9350)
           at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:210)
           at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
           at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
           at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
           ... 90 more

          分析及解決:
          在頁面保存的時候,后臺提示是違反唯一索引,通過UI_PLY_CVRG 查詢相應的表,
          select * from user_indexes  where index_name='UI_PLY_CVRG'
          該表是WEB_PLY_CVRG ,而該表的唯一索引UI_PLY_CVRG 是由該表的3個字段組成C_PLY_NO、N_EDR_PRJ_NO、 N_SEQ_NO,然后看下頁面發現是N_SEQ_NO有4個重復,刪除多余的記錄即可保存成功。

           

          posted @ 2010-07-10 16:55 斷點 閱讀(7274) | 評論 (0)編輯 收藏

          在項目中經常需要處理一些輸入字符,往往我們也需要對其進行校驗,而使用正則表達式是一個很好的處理方法。下面介紹一款處理正則表達式的軟件 Match Tracer v2.0,MTracer最有用的特性是中文的正則式分析樹。

          下載地址:http://www.52z.com/down/30160.Html
          官網:http://www.regexlab.com/zh/mtracer/

          posted @ 2010-07-10 16:06 斷點 閱讀(174) | 評論 (0)編輯 收藏

          在平時的項目中,經常需要開一下別人寫的源碼,而此時別人提供的往往是jar文件,根本看不了,很是不爽。最近很偶然的看見一個同事在eclipse下查看class文件,很是興奮。下面講下是如何安裝下插件的。

          打開class文件,我目前了解的有2種類型的軟件:
          一、在eclipse外部打開jar文件。
          Java Decompiler.exe,主頁JD home page: http://java.decompiler.free.fr ,該軟件可以打開整個jar包,功能很強大。

          二、在eclipse內部打開jar文件。
          net.sf.jadclipse_3.3.0.jar、jad158g.win.zip,需要這兩個文件。
          準備工作:
          1、下載jad.exe文件:http://www.varaneckas.com/jad
          2、下載jadeclipse插件:http://sourceforge.net/projects/jadclipse/files/

          安裝如下:

          1、將jadeclipse插件net.sf.jadclipse_3.3.0.jar 拷貝到myeclipse安裝目錄E:\MyEclipse 6.0\eclipse\myplugins\jad\eclipse\plugins目錄下,并在目錄E:\MyEclipse 6.0\eclipse\links下新建文件jad.link,內容如下path=E:\\MyEclipse 6.0\\eclipse\\myplugins\\jad\\ 

          2、將jad.exe解壓到指定目錄。如:D:\tools 

          3、在eclipse窗口下,點擊Window > Preferences > Java > JadClipse > Path to Decompiler。(設置jad的絕對路徑,如 D:\tools\jad\jad.exe)。Use Eclipse code formatter(overrides Jad formatting instructions)選項打勾,與格式化出來的代碼樣式一致。

          4、在eclipse窗口下,點擊Window > Preferences > Java > JadClipse > Misc,將Convert Unicode strings into ANSI strings選項打勾,避免反編譯后可能出現的中文亂碼。

          5、重新啟動myeclipse,eclipse自動將JadClipse Class File Viewer設置成class文件的缺省打開方式。如果沒有默認,可以在Eclipse的Window > Preferences >General >Editors> File Associations中修改“*.class”默認關聯的編輯器為“JadClipse Class File Viewer”。設置完成后,雙擊*.class文件,eclipse將自動反編譯。

          posted @ 2010-07-10 15:31 斷點 閱讀(5910) | 評論 (2)編輯 收藏

          select e1.ename,e2.ename from emp e1 join emp e2 on (e1.mgr=e2.empno); --自連接,從e2中取出e1的經理人。
          select ename,dname from emp e left join dept d on (e.deptno=d.deptno);   --左外連接
          select ename,dname from emp e right outer join dept d on (e.deptno=d.deptno);   --右外連接
          select ename,dname from emp e full join dept d on (e.deptno=d.deptno);    --全連接


          --求部門中哪些人的薪水最高
          select ename,sal from emp
          join (select max(sal) max_sal,deptno from emp group by deptno) t
          on (emp.sal = t.max_sal and emp.deptno = t.deptno);

          --求部門平均薪水的等級
          select deptno,avg_sal,grade from
          (select deptno,avg(sal) avg_sal from emp group by deptno) t
          join salgrade s on (t.avg_sal between s.losal and s.hisal);


          --求部門平均的薪水等級
          select avg(grade) from
          (select deptno,ename,grade from emp join salgrade s on (emp.sal between s.losal and s.hisal )) t
          group by deptno;

          --雇員中有哪些人是經理人
          select ename from emp where empno in (select distinct mgr from emp);


          --不準用組函數,求薪水的最高值。采用的是自連接。
          select distinct sal from emp where sal not in
          (select distinct e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal));


          --求平均薪水最高的部門的部門編號。嵌套的組函數。
          select deptno,avg_sal from
          (select avg(sal) avg_sal,deptno from emp group by deptno)
          where avg_sal =
          (select max(avg(sal)),deptno from emp group by deptno;

           

          --求平均薪水的等級最低的部門的部門名稱。
          select dname,t1.deptno,grade,avg_sal from
            (
             select deptno,grade,avg_sal from
               (select deptno,avg(sal) avg_sal from emp group by deptno) t
               join salgrade s on (t.avg_sal between s.losal and s.hisal)
            )
             t1
             join dept on (t1.deptno = dept.deptno)
          )
          where t1.grade =
          (
           select min(grade) from
               (select deptno,grade,avg_sal from
            (select deptno,grade,avg(sal) avg_sal from emp group by deptno) t
             join salgrade s on (t.avg_sal between s.losal and s.hisal)
               )
          )


          --求平均薪水的等級最低的部門的部門名稱。采用視圖。
          conn sys/sys as sysdba;
          grant create table,create view to scott;

          create view v$_dept_avg_sal_info as
          select deptno,grade,avg_sal from
            (select deptno,grade,avg(sal) avg_sal from emp group by deptno) t
             join salgrade s on (t.avg_sal between s.losal and s.hisal);

          select dname,t1.deptno,grade,avg_sal from
             v$_dept_avg_sal_info t1
             join dept on (t1.deptno = dept.deptno)
          )
          where t1.grade =
          (
           select min(grade) from  v$_dept_avg_sal_info
          )

          -- 比普通員工的最高薪水還要高的經理人名稱。
          select ename from emp
          where empno in (select distinct mgr from emp where mgr is not null)
          and sal >
          (
            select max(sal) from emp where empno not in
            (select distinct mgr from emp where mgr is not null)
          )

           

          posted @ 2010-07-06 23:25 斷點 閱讀(540) | 評論 (0)編輯 收藏

          僅列出標題
          共18頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 古浪县| 榕江县| 泰顺县| 太和县| 湖州市| 介休市| 松原市| 舞阳县| 扶风县| 孟村| 新泰市| 屏山县| 凤冈县| 甘谷县| 台江县| 新邵县| 青田县| 涿鹿县| 石狮市| 廊坊市| 八宿县| 合山市| 齐河县| 手游| 富民县| 定远县| 康马县| 镇赉县| 岳池县| 华安县| 南木林县| 汤原县| 凌云县| 镇康县| 孟村| 临漳县| 金华市| 广东省| 五峰| 开鲁县| 阳城县|