斷點(diǎn)

          每天進(jìn)步一點(diǎn)點(diǎn)!
          posts - 174, comments - 56, trackbacks - 0, articles - 21

          導(dǎo)航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(5)

          隨筆分類(174)

          隨筆檔案(174)

          文章分類(21)

          文章檔案(21)

          好友連接

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          SELECT   *
              FROM (SELECT   COUNT (c_nme_en) as cus , c_nme_en
                        FROM web_prod
                       WHERE c_prod_no = '0325' AND c_tab_no != '0040'
                    GROUP BY c_nme_en)
             WHERE cus > 1
          order by c_nme_en

          這個(gè)就是對(duì)c_nme_en列的不同內(nèi)容進(jìn)行統(tǒng)計(jì)。

           

          可以參考:http://www.w3school.com.cn/sql/sql_groupby.asp


          posted @ 2009-06-03 11:11 斷點(diǎn) 閱讀(56) | 評(píng)論 (0)

          posted @ 2010-01-14 22:11 斷點(diǎn) 閱讀(299) | 評(píng)論 (0)編輯 收藏

          數(shù)據(jù)類型:

          數(shù)字類型:
          Number用來(lái)表示可變長(zhǎng)的數(shù)值列,語(yǔ)法為Number(p, s),p是指所有有效數(shù)字的位數(shù),s是指小數(shù)點(diǎn)以后的位數(shù);p和s的取值分別是p=1 to 38,s=-84 to 127;
          有效數(shù)位:從左邊第一個(gè)不為0的數(shù)算起,小數(shù)點(diǎn)和負(fù)號(hào)不計(jì)入有效位數(shù)。

          p>0,對(duì)s分3種情況:
          1. s>0
          精確到小數(shù)點(diǎn)右邊s位,并四舍五入。然后檢驗(yàn)有效數(shù)位是否<=p;如果s>p,小數(shù)點(diǎn)右邊至少有s-p個(gè)0填充。
          2. s<0
          精確到小數(shù)點(diǎn)左邊s位,并四舍五入。然后檢驗(yàn)有效數(shù)位是否<=p+|s|
          3.s是0或者未指定,四舍五入到最近整數(shù)。
          注意:當(dāng)p小于s時(shí)候,表示數(shù)字是絕對(duì)值小于1的數(shù)字,且從小數(shù)點(diǎn)右邊開(kāi)始的前s-p 位必須是0,保留s位小數(shù)。

          比如
          Value             Datatype     Stored Value
          123.2564       NUMBER    123.2564
          1234.9876     NUMBER(6)    1235
          1234.9876     NUMBER(6,2)    1234.99
          12345.12345 NUMBER(6,2)    Error
          12345.345     NUMBER(5,-2)    12300
          1234567        NUMBER(5,-2)    1234600
          12345678      NUMBER(5,-2)    Error
          12345.58      NUMBER(*, 1)    12345.6
          0.1               NUMBER(4,5)    Error
          0.01234567   NUMBER(4,5)    0.01235
          0.09999        NUMBER(4,5)    0.09999
          0.099996      NUMBER(4,5)    <> 
           

          用法如下:
          create table t_n(id number(5,2));

          insert into t_n values(123.455);
          insert into t_n values(1.234);
          insert into t_n values(.001);

          select * from t_n 結(jié)果為:
          ID
          123.46
          1.23
          0.00

          Number類型存儲(chǔ)實(shí)數(shù),PLS_Integer和BINARY_Integer只能存儲(chǔ)整數(shù)。

          字符類型:

          Char表示定長(zhǎng)的字符串,語(yǔ)法Char(L),L是可選的。如果沒(méi)有指定L值,默認(rèn)為1;最大長(zhǎng)度為32767。

          VarChar2用來(lái)存儲(chǔ)可變的字符串,語(yǔ)法VarChar2(L),L是必須的。最大長(zhǎng)度為32767。

          布爾類型:

          Boolean類型的合法賦值為T(mén)rue、False和Null。

          類型轉(zhuǎn)換:

          To_Char:可以將Number和Date類型轉(zhuǎn)換為Varchar2類型;

          To_Date:將Char類型轉(zhuǎn)換Date類型;

          To_Number:將Char類型轉(zhuǎn)換Number類型;

          變量和常量:

          變量名稱:1.必須以字母開(kāi)頭;2.其后可以跟一個(gè)或多個(gè)字母、數(shù)字(0~9)、特殊字符$、#或_ ;

                        3.變量長(zhǎng)度不超過(guò)30個(gè)字符;4.變量名中不能有空格。

          1.變量的聲明:

          DECLARE
          v_StudentName VARCHAR2(20),
          v_CurrentDate DATE;
          v_NumberCredits NUMBER(3);

          2.自定義的數(shù)據(jù)類型:

          DECLARE
          TYPE t_StudentRecord IS RECORD (FirstName Varchar2(10),LastName Varchar2(10),

          CurrentCredits NUMBER(3));
          v_Student  t_StudentRecord;

          3.變量屬性:

          下面介紹常見(jiàn)的幾種復(fù)合數(shù)據(jù)類型變量的定義。
              (1)使用%type定義變量
              為了讓PL/SQL中變量的類型和數(shù)據(jù)表中的字段的數(shù)據(jù)類型一致,Oracle 9i提供了%type定義方法。這
          樣當(dāng)數(shù)據(jù)表的字段類型修改后,PL/SQL程序中相應(yīng)變量的類型也自動(dòng)修改。如下:
          declare
             mytable emp.empno%type;
          begin
             select a.empno into mytable
             from emp a
             where a.ename='SCOTT';
             dbms_output.put_line(mytable);
          end;
             

             (2)使用%rowtype定義變量
             
          使用%type可以使變量獲得字段的數(shù)據(jù)類型,使用%rowtype可以使變量獲得整個(gè)記錄的數(shù)據(jù)類型。

              比較兩者定義的不同:變量名 數(shù)據(jù)表.列名%type,變量名 數(shù)據(jù)表%rowtype。
          declare
             mytable emp%rowtype;
          begin
             select * into mytable
             from emp a
             where a.ename='SCOTT';
             dbms_output.put_line(mytable.empno||' '||mytable.job);
          end;
           

          流程控制:

           

           待續(xù)。。。

          posted @ 2009-02-03 11:33 斷點(diǎn) 閱讀(176) | 評(píng)論 (0)

          posted @ 2010-01-14 22:09 斷點(diǎn) 閱讀(341) | 評(píng)論 (0)編輯 收藏

          SELECT b.c_dpt_cde      as CDptCde,
                 a.c_prod_no      as CProdNo,
                 a.c_ply_no       as CPlyNo,
                 a.c_edr_no       as CEdrNo,
                 a.c_insrnt_cde   as CInsrntCde,
                 a.c_bs_cur       as CBsCur,
                 a.n_bs_amt       as NBsAmt,
                 a.n_exch_rate    as NExchRate,
                 a.c_rp_cur       as CRpCur,
                 a.n_rp_amt       as NRpAmt,
                 a.n_orig_cur_amt as NOrigCurAmt,
                 a.c_main_con_cde as CMainConCde,
                 a.c_sls_cde      as CSlsCde,
                 a.c_cha_cls      as CChaCls,
                 a.c_cha_cde      as CChaCde,
                 b.c_oper_cde     as COperCde,
                 b.t_cav_tm       as TCavTm,
                 b.t_upd_tm       as TUpdTm,
                 a.c_cav_pk_id    as CCavPkId,
                 c.c_rp_type      as CRpType,
                 b.c_check_cde    as CCheckCde,
                 b.t_check_tm     as TCheckTm,
                 b.c_check_flag   as CCheckFlag,
                 b.c_check_memo   as CCheckMemo,
                 a.c_prmdue_pk_id as CPrmduePkId,
                 a.c_paydue_pk_id as CPayduePkId,
                 a.c_clmdue_pk_id as CClmduePkId,
                 a.c_cavdoc_pk_id as CCavdocPkId,
                 a.c_clm_no       as CClmNo,
                 a.c_bill_flag    as CBillFlag,
                 a.c_feetyp_cde   as CFeetypCde
            FROM web_fin_cav_doc a
            left join web_fin_cav_bill b on a.c_cav_pk_id = b.c_cav_pk_id
            left join web_fin_cav_rptyp c on a.c_cav_pk_id = c.c_cav_pk_id
           WHERE 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1
             AND 1 = 1;

           

          上面實(shí)現(xiàn)的是三個(gè)數(shù)據(jù)表之間的左連接。以前看見(jiàn)過(guò)兩個(gè)表的左連接,而要實(shí)現(xiàn)三個(gè)表之間的左連接,還真有點(diǎn)困難,搞了半天才做出來(lái)。。。


          posted @ 2009-02-27 09:50 斷點(diǎn) 閱讀(356) | 評(píng)論 (0)

          posted @ 2010-01-14 22:09 斷點(diǎn) 閱讀(411) | 評(píng)論 (0)編輯 收藏

          1.集合操作:

               Union 用第二個(gè)查詢結(jié)果合并第一個(gè)查詢結(jié)果,同時(shí)不顯示重復(fù)的行。

               Union all 檢索出所有的行,包括重復(fù)的行

               intersect 返回兩個(gè)查詢所檢索出的共有行。

               minus 返回將第二個(gè)查詢檢索出的行從第一個(gè)查詢檢索出的行中減去之后剩余的行。

          select ename,dname,job
          from dept t,emp p
          where t.deptno=p.deptno and t.dname='SALES'
          union/intersect/minus
          select ename,dname,job
          from dept t,emp p
          where t.deptno=p.deptno and p.job='MANAGER';

          2.子查詢:

          可以在一個(gè)select語(yǔ)句中嵌入另一個(gè)完整的select語(yǔ)句,但此句的子查詢的返回結(jié)果只能有一個(gè),如想返回多個(gè)可用 in 。

          select ename,dname,job
          from dept t,emp p
          where t.deptno=p.deptno and t.dname=
          (
          select dname
          from dept t,emp p
          where t.deptno=p.deptno and p.sal=1600.00
          );

          select  ename,dname,job
          from dept t,emp p
          where t.deptno=p.deptno and t.dname in
          (
          select dname
          from dept t,emp p
          where t.deptno=p.deptno and p.sal>3000.00
          );

          3.表的連接:

          select t.dname

          from emp p,dept t
          where p.deptno=t.deptno and p.ename='SMITH';

          由于實(shí)施了關(guān)系連接的兩表是任何連接的,所有需要在where子句中設(shè)置主關(guān)鍵字等于外部關(guān)鍵字的條件,否則查詢結(jié)果不對(duì)。

          4.case語(yǔ)句:

          *簡(jiǎn)單case語(yǔ)句,使用表達(dá)式確定返回值,但case后的變量只有一個(gè)

          select t.dname,t.loc,t.deptno,
          case t.deptno
          when 10 then 'ACCOUNTING'
          when 20 then 'RESEARCH'
          when 30 then 'SALES'
          else 'T'
          end
          from dept t;

          *搜索case語(yǔ)句,使用條件確定返回值,但when后面可以跟多個(gè)條件

          select t.dname,t.loc,t.deptno,
          case
          when t.deptno=10 and t.loc='CHICAGO' then 'ACCOUNTING'
          when t.deptno=20 then 'RESEARCH'
          when t.deptno=30 then 'SALES'
          else 'T'
          end
          from dept t;

          5.decode函數(shù):

          decode(value,search_value,result,default_value)

          如果value和search_value相等,則返回result,否則返回default_value。

          select t.dname,t.loc,t.deptno,
          decode(t.deptno,
          10,'ACCOUNTING',
          20,'RESEARCH',
          30,'SALES',
          'T'
          )
          from dept t;


          posted @ 2009-01-13 17:15 斷點(diǎn) 閱讀(240) | 評(píng)論 (0)

          posted @ 2010-01-14 22:07 斷點(diǎn) 閱讀(277) | 評(píng)論 (0)編輯 收藏

          1.在where子句中使用比較運(yùn)算符:= ,!=(不等于) , <> (不等于), < ,> ,<= ,>= ,like。

          2.使用比較運(yùn)算符like:%通配符可以匹配任何長(zhǎng)度的字符;_每個(gè)下劃線匹配一個(gè)字母。

          3.or:或的意思。

          4.and:連接的兩個(gè)條件必須同時(shí)滿足。

          5.not 非:select * from web_fin_dcr t where not t.n_item_no in(1,2);

          6.between...and:指定某個(gè)范圍內(nèi)的所有值,包括指定值本身。

          7.in用來(lái)指定一條列值:select * from web_fin_dcr t where t.n_item_no in(1,2);

          8.order by:對(duì)檢索到的數(shù)據(jù)進(jìn)行排序,默認(rèn)為升序asc(ascend),降序?yàn)閐esc(descend)。

          select * from web_fin_dcr t where  t.n_item_no in(1,2,3) order by t.n_item_no desc;

          9.distinct來(lái)檢索唯一的表列值,也就是檢索哪些不同的數(shù)據(jù):

              select distinct t.c_cav_flag from web_fin_dcr t where  t.n_item_no in(1,2,3);


          posted @ 2009-01-12 16:19 斷點(diǎn) 閱讀(61) | 評(píng)論 (0)

          posted @ 2010-01-14 22:06 斷點(diǎn) 閱讀(216) | 評(píng)論 (0)編輯 收藏

          <beans>
          <bean id="person" class="org.spring.bean.Person">
           <property name="name">
                <value>zhangsan</value>
           /property>
           <property name="age">
               <value>23</value>
           </property>
          </bean>
          </beans>

          注意:配置bean的開(kāi)始,注意在property里name的屬性值要和你在bean類里面的那個(gè)name成員變量一樣。

          從上面.xml的文檔說(shuō)明我們可以知道id屬性是一個(gè)bean的唯一標(biāo)示符,這個(gè)id在管理Bean的BeanFactory或者ApplicationContext中必須是唯一的標(biāo)示符。用法如下
          Person p = (Person) a.getBean("person");在getBean()方法里所傳遞的參數(shù)就是bean的id屬性值。

          當(dāng)然我們也可以使用name屬性來(lái)指定Bean的id演示代碼如下:
          <beans>
          <bean name="person,user" class="org.spring.bean.Person">
            <property name="name">
               <value>zhangsan</value>
            </property>
            <property name="age">
               <value>23</value>
           </property>
          </bean>
          </beans>

          使用bean的id和name來(lái)指定bean的id的區(qū)別:
          id屬性允許我們指定一個(gè)Bean的id,并且它在XML DTD中作為一個(gè)真正的XML元素的ID屬性被標(biāo)記,所以XML解析器能夠在其他元素指向它的時(shí)候做一些額外的效驗(yàn);name屬性則與id相反,如果我們?cè)陂_(kāi)發(fā)中有必要使用一些非法的字符,那么我們可以通過(guò)name屬性指定一個(gè)或多個(gè)id。當(dāng)我們指定多個(gè)id時(shí)要用逗號(hào)(,)或者(;)來(lái)進(jìn)行分隔。

          用法如下:Person p = (Person) a.getBean("person"); 或改寫(xiě)為Person p = (Person) a.getBean("user");



          posted @ 2009-02-11 10:35 斷點(diǎn) 閱讀(1005) | 評(píng)論 (0)

          posted @ 2010-01-14 22:02 斷點(diǎn) 閱讀(308) | 評(píng)論 (0)編輯 收藏

          數(shù)據(jù)庫(kù)使用鎖(lock)來(lái)保證任何給定時(shí)刻最多只有一個(gè)事務(wù)在修改給定的一段數(shù)據(jù)。實(shí)質(zhì)上講,正是鎖機(jī)制才使并發(fā)控制成為可能。

          ORACLE的封鎖策略:  
            1、只有當(dāng)修改時(shí),Oracle在行級(jí)上鎖定數(shù)據(jù),不要把鎖定上升到塊或表級(jí)。  
            2、Oracle決不會(huì)為讀取而鎖定數(shù)據(jù),簡(jiǎn)單讀取不能在數(shù)據(jù)行上設(shè)置鎖定。  
            3、數(shù)據(jù)的寫(xiě)入器不會(huì)阻塞數(shù)據(jù)讀取器。  
            4、只有當(dāng)另一個(gè)數(shù)據(jù)寫(xiě)入器已經(jīng)鎖定了某行數(shù)據(jù)后,才阻塞其他人對(duì)該行數(shù)據(jù)的寫(xiě)入。數(shù)據(jù)的讀取器決不會(huì)阻塞數(shù)據(jù)的寫(xiě)入器。

           

           

          -------------------------------------------------------------------------
          Oracle并發(fā)處理機(jī)制的簡(jiǎn)單看法。http://www.51testing.com/html/97/n-131297.html

          轉(zhuǎn)載內(nèi)容如下:

          在Oracle開(kāi)發(fā)過(guò)程中,如果你只是獨(dú)立地測(cè)試你的應(yīng)用,然后部署,并交給數(shù)十個(gè)并發(fā)用戶使用,就很有可能痛苦地遭遇原先未能檢測(cè)到的并發(fā)問(wèn)題。例如,2個(gè)用戶同時(shí)修改某張訂單,首先他們會(huì)查詢這張訂單存在不存在,如果存在,那么修改它的狀態(tài)。在并發(fā)操作中,用戶1會(huì)很奇怪的發(fā)現(xiàn)他的修改丟失了。當(dāng)然,除此之外,在未能夠很好的處理并發(fā)問(wèn)題可能遭遇的情況還有:

            ◆破壞數(shù)據(jù)的完整性。

            ◆隨著用戶數(shù)的增多,應(yīng)用的運(yùn)行速度減慢。

            ◆不能很好地?cái)U(kuò)縮應(yīng)用來(lái)支持大量用戶。

            為解決這些問(wèn)題。首先要引入的是ORACLE的鎖機(jī)制。數(shù)據(jù)庫(kù)使用鎖(lock)來(lái)保證任何給定時(shí)刻最多只有一個(gè)事務(wù)在修改給定的一段數(shù)據(jù)。實(shí)質(zhì)上講,正是鎖機(jī)制才使并發(fā)控制成為可能。對(duì)ORACLE的鎖機(jī)制可以查看ORACLE官方文檔介紹。以下是對(duì)ORACLE鎖的一點(diǎn)總結(jié)。

            Oracle只在修改時(shí)才對(duì)數(shù)據(jù)加行級(jí)鎖。正常情況下不會(huì)升級(jí)到塊級(jí)鎖或表級(jí)鎖(不過(guò)兩段提交期間的一段很短的時(shí)間內(nèi)除外,這是一個(gè)不常見(jiàn)的操作)。

            ◆如果只是讀數(shù)據(jù),Oracle絕不會(huì)對(duì)數(shù)據(jù)鎖定。不會(huì)因?yàn)楹?jiǎn)單的讀操作在數(shù)據(jù)行上鎖定。

            ◆寫(xiě)入器(writer)不會(huì)阻塞讀取器(reader)。換種說(shuō)法:讀(read)不會(huì)被寫(xiě)(write)阻塞。這一點(diǎn)幾乎與其他所有數(shù)據(jù)庫(kù)都不一樣。在其他數(shù)據(jù)庫(kù)中,讀往往會(huì)被寫(xiě)阻塞。盡管聽(tīng)上去這個(gè)特性似乎很不錯(cuò)(一般情況下確實(shí)如此),但是,如果你沒(méi)有充分理解這個(gè)思想,而且想通過(guò)應(yīng)用邏輯對(duì)應(yīng)用施加完整性約束,就極有可能做得不對(duì)。

            ◆寫(xiě)入器想寫(xiě)某行數(shù)據(jù),但另一個(gè)寫(xiě)入器已經(jīng)鎖定了這行數(shù)據(jù),此時(shí)該寫(xiě)入器才會(huì)被阻塞。讀取器絕對(duì)不會(huì)阻塞寫(xiě)入器。

            開(kāi)發(fā)人員要盡可能的考慮以上因素。而且還要意識(shí)到這些事ORACLE獨(dú)有的。針對(duì)其他數(shù)據(jù)庫(kù),在鎖的應(yīng)用上略有不同。

            以DB2為例

            1.Oracle通過(guò)具有意向鎖的多粒度封鎖機(jī)制進(jìn)行并發(fā)控制,保證數(shù)據(jù)的一致性。其DML鎖(數(shù)據(jù)鎖)分為兩個(gè)層次(粒度):即表級(jí)和行級(jí)。通常的DML操作在表級(jí)獲得的只是意向鎖(RS或RX),其真正的封鎖粒度還是在行級(jí);DB2也是通過(guò)具有意向鎖的多粒度封鎖機(jī)制進(jìn)行并發(fā)控制,保證數(shù)據(jù)的一致性。

            其DML鎖(數(shù)據(jù)鎖)分為兩個(gè)層次(粒度):即表級(jí)和行級(jí)。通常的DML操作在表級(jí)獲得的只是意向鎖(IS,SIX或IX),其真正的封鎖粒度也是在行級(jí);另外,在Oracle數(shù)據(jù)庫(kù)中,單純地讀數(shù)據(jù)(SELECT)并不加鎖,這些都提高了系統(tǒng)的并發(fā)程度,Oracle強(qiáng)調(diào)的是能夠“讀”到數(shù)據(jù),并且能夠快速的進(jìn)行數(shù)據(jù)讀取。而DB2的鎖強(qiáng)調(diào)的是“讀一致性”,進(jìn)行讀數(shù)據(jù)(SELECT)時(shí)會(huì)根據(jù)不同的隔離級(jí)別(RR,RS,CS)而分別加S,IS,IS鎖,只有在使用UR隔離級(jí)別時(shí)才不加鎖。從而保證不同應(yīng)用程序和用戶讀取的數(shù)據(jù)是一致的。

            2. 在支持高并發(fā)度的同時(shí),DB2和Oracle對(duì)鎖的操縱機(jī)制有所不同:Oracle利用意向鎖及數(shù)據(jù)行上加鎖標(biāo)志位等設(shè)計(jì)技巧,減小了Oracle維護(hù)行級(jí)鎖的開(kāi)銷,使其在數(shù)據(jù)庫(kù)并發(fā)控制方面有著一定的優(yōu)勢(shì)。而DB2中對(duì)每個(gè)鎖會(huì)在鎖的內(nèi)存(locklist)中申請(qǐng)分配一定字節(jié)的內(nèi)存空間,具體是X鎖64字節(jié)內(nèi)存,S鎖32字節(jié)內(nèi)存(注:DB2 V8之前是X鎖72字節(jié)內(nèi)存而S鎖36字節(jié)內(nèi)存)。

            3. Oracle數(shù)據(jù)庫(kù)中不存在鎖升級(jí),而DB2數(shù)據(jù)庫(kù)中當(dāng)數(shù)據(jù)庫(kù)表中行級(jí)鎖的使用超過(guò)locklist*maxlocks會(huì)發(fā)生鎖升級(jí)。

            4. 在Oracle中當(dāng)一個(gè)session對(duì)表進(jìn)行insert,update,delete時(shí)候,另外一個(gè)session仍然可以從Orace回滾段或者還原表空間中讀取該表的前映象(before image); 而在DB2中當(dāng)一個(gè)session對(duì)表進(jìn)行insert,update,delete時(shí)候,另外一個(gè)session仍然在讀取該表數(shù)據(jù)時(shí)候會(huì)處于lock wait狀態(tài),除非使用UR隔離級(jí)別可以讀取第一個(gè)session的未提交的值;所以O(shè)racle同一時(shí)刻不同的session有讀不一致的現(xiàn)象,而DB2在同一時(shí)刻所有的session都是“讀一致”的。


          posted @ 2009-11-28 17:50 斷點(diǎn) 閱讀(24) | 評(píng)論 (0)

          posted @ 2010-01-14 21:57 斷點(diǎn) 閱讀(525) | 評(píng)論 (0)編輯 收藏

          今天在選擇一條記錄進(jìn)行做刪除操作時(shí),碰見(jiàn)index失敗的問(wèn)題,如下:
          處理失敗!錯(cuò)誤信息:[SQLException  ORA-01502  index  VHL_V6.PK_WEB_APP_TGT_OBJ  or partition of such index is in unusable state ]
          在網(wǎng)上查詢了下,知道原因,就上數(shù)據(jù)庫(kù)查了一下,結(jié)果如下:
          1 PK_WEB_APP_TGT_OBJ NORMAL VHL_V6 TABLE UNUSABLE。
          顯然是UNUSABLE狀態(tài),那也就知道原因了,呵呵,解決!

          以下為參考文件:

          SQL> create table t(a number);
          Table created.

          1、現(xiàn)在,我們建立一個(gè)唯一索引來(lái)看看:
          SQL> create unique index idx_t on t(a);
          Index created.
          SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='T';         
          no rows selected
          SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
          INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
          ------------------------------ --------------------------- ------------------------------ ----------- --------
          IDX_T                          NORMAL                      DATA_DYNAMIC                   TABLE       VALID
          SQL> insert into t values(1);
          1 row created.
          SQL> commit;
          Commit complete.

          2、將索引手工修改為unusable狀態(tài)(模擬發(fā)生索引失效的情況):
          SQL> alter index idx_t unusable;
          Index altered.
          SQL>  select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
          INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
          ------------------------------ --------------------------- ------------------------------ ----------- --------
          IDX_T                          NORMAL                      DATA_DYNAMIC                   TABLE       UNUSABLE
          我們看到這是,已經(jīng)不能正常往表中插入數(shù)據(jù):
          SQL> insert into t values(2);
          insert into t values(2)
          *
          ERROR at line 1:
          ORA-01502: index 'MISC.IDX_T' or partition of sUCh index is in unusable state

          3、首先,我們通過(guò)重建索引(rebuild index)的方法來(lái)解決問(wèn)題:
          SQL> alter index idx_t rebuild;
          Index altered.
          SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
          INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
          ------------------------------ --------------------------- ------------------------------ ----------- --------
          IDX_T                          NORMAL                      DATA_DYNAMIC                   TABLE       VALID
          SQL> insert into t values(2);
          1 row created.
          SQL> commit;
          Commit complete.
          SQL>

          4、現(xiàn)在我們?cè)俅文M索引失效(unusable狀態(tài)):
          SQL> alter index idx_t unusable;
          Index altered.
          SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
          INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
          ------------------------------ --------------------------- ------------------------------ ----------- --------
          IDX_T                          NORMAL                      DATA_DYNAMIC                   TABLE       UNUSABLE
          SQL> insert into t values(3);
          insert into t values(3)
          *
          ERROR at line 1:
          ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state

          5、然后,看看是否可以通過(guò)設(shè)置參數(shù)skip_unusable_indexes=true來(lái)解決問(wèn)題:
          SQL> alter session set skip_unusable_indexes=true;
          Session altered.
          SQL> insert into t values(3);
          insert into t values(3)
          *
          ERROR at line 1:
          ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state
          SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
          INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
          ------------------------------ --------------------------- ------------------------------ ----------- --------
          IDX_T                          NORMAL                      DATA_DYNAMIC                   TABLE       UNUSABLE
          SQL> alter index idx_t rebuild;
          Index altered.
          SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
          INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME                TABLE_TYPE  STATUS
          ------------------------------ --------------------------- ------------------------------ ----------- --------
          IDX_T                          NORMAL                      DATA_DYNAMIC                   TABLE       VALID
          SQL> insert into t values(3);
          1 row created.
          SQL> commit;
          Commit complete.
          SQL>

          總結(jié):對(duì)于unique index,通過(guò)簡(jiǎn)單的設(shè)置參數(shù)是不能解決問(wèn)題的,要解決unique index 失效的問(wèn)題,只能通過(guò)重建索引來(lái)實(shí)現(xiàn)。

          資料引用:http://www.knowsky.com/388811.html


          posted @ 2009-09-26 21:36 斷點(diǎn) 閱讀(80) | 評(píng)論 (0)

          posted @ 2010-01-14 21:56 斷點(diǎn) 閱讀(1626) | 評(píng)論 (0)編輯 收藏

          1、用戶
          查看當(dāng)前用戶的缺省表空間:SQL>select username,default_tablespace from user_users;
          查看當(dāng)前用戶的角色:SQL>select * from user_role_privs;
          查看當(dāng)前用戶的系統(tǒng)權(quán)限和表級(jí)權(quán)限
          SQL>select * from user_sys_privs;
          SQL>select * from user_tab_privs;

          顯示當(dāng)前會(huì)話所具有的權(quán)限:SQL>select * from session_privs;
          顯示指定用戶所具有的系統(tǒng)權(quán)限:SQL>select * from dba_sys_privs where grantee='GAME';
          顯示特權(quán)用戶:select * from v$pwfile_users;
          顯示用戶信息(所屬表空間)
          select default_tablespace,temporary_tablespace
          from dba_users where username='GAME';

          顯示用戶的PROFILE :select profile from dba_users where username='GAME';

          2、表
          查看用戶下所有的表 SQL>select * from user_tables;

          查看名稱包含log字符的表
          SQL>select object_name,object_id from user_objects  where instr(object_name,'LOG')>0;

          查看某表的創(chuàng)建時(shí)間
          SQL>select object_name,created from user_objects where object_name=upper('&table_name');

          查看某表的大小
          SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
          where segment_name=upper('&table_name');

          查看放在ORACLE的內(nèi)存區(qū)里的表
          SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;

          3、索引
          查看索引個(gè)數(shù)和類別
          SQL>select index_name,index_type,table_name from user_indexes order by table_name;

          查看索引被索引的字段
          SQL>select * from user_ind_columns where index_name=upper('&index_name');

          查看索引的大小
          SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
          where segment_name=upper('&index_name');

          4、序列號(hào)
          查看序列號(hào),last_number是當(dāng)前值
          SQL>select * from user_sequences;

          5、視圖
          查看視圖的名稱 SQL>select view_name from user_views;

          查看創(chuàng)建視圖的select語(yǔ)句
          SQL>set view_name,text_length from user_views;
          SQL>set long 2000; 說(shuō)明:可以根據(jù)視圖的text_length值設(shè)定set long 的大小
          SQL>select text from user_views where view_name=upper('&view_name');

          6、同義詞
          查看同義詞的名稱
          SQL>select * from user_synonyms;

          7、約束條件
          查看某表的約束條件
          SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
          from user_constraints where table_name = upper('&table_name');

          SQL>select c.constraint_name,c.constraint_type,cc.column_name
          from user_constraints c,user_cons_columns cc
          where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
          and c.owner = cc.owner and c.constraint_name = cc.constraint_name
          order by cc.position;

          8、存儲(chǔ)函數(shù)和過(guò)程
          查看函數(shù)和過(guò)程的狀態(tài)
          SQL>select object_name,status from user_objects where object_type='FUNCTION';
          SQL>select object_name,status from user_objects where object_type='PROCEDURE';

          查看函數(shù)和過(guò)程的源代碼
          SQL>select text from all_source where owner=user and name=upper('&plsql_name');

          轉(zhuǎn)載:http://www.javaeye.com/topic/264639

          posted @ 2009-09-14 17:29 斷點(diǎn) 閱讀(28) | 評(píng)論 (0)

          posted @ 2010-01-14 21:55 斷點(diǎn) 閱讀(229) | 評(píng)論 (0)編輯 收藏

          最近看C語(yǔ)言的程序,程序里面帶有sql語(yǔ)句,其中就有這么一句:
          EXEC SQL select upper(nvl(c_grant_dpt_cde,'0')),nvl(C_CTCT_CDE,'0') into :sGrantCde,:sCtctCde from t_department where c_dpt_cde = :sDptCde;
            if (sqlca.sqlcode!=0) {
                   printf("[ppPlyNewCountPrm]ERROR:sqlca.sqlerrmc = %s\n", sqlca.sqlerrm.sqlerrmc);
                   return(SetUserError(lpInBuffer,2,"取機(jī)構(gòu)部門(mén)歸屬錯(cuò)誤!"));
            }

          不明白 sqlca.sqlcode = 0 是什么意思,搜了搜,記錄一下sqlca.sqlcode的各種取值的意義:

              0 ——最近一次sql語(yǔ)句執(zhí)行成功

             -1 ——最近一次sql語(yǔ)句執(zhí)行失敗

          100 ——最近一次sql語(yǔ)句沒(méi)有返回?cái)?shù)據(jù)


          posted @ 2009-09-10 19:59 斷點(diǎn) 閱讀(129) | 評(píng)論 (0)

          posted @ 2010-01-14 21:54 斷點(diǎn) 閱讀(1344) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共18頁(yè): First 上一頁(yè) 7 8 9 10 11 12 13 14 15 下一頁(yè) Last 
          主站蜘蛛池模板: 仙桃市| 乃东县| 织金县| 祥云县| 宁远县| 邢台县| 南宁市| 台中县| 当涂县| 大竹县| 吉隆县| 高阳县| 大同县| 体育| 抚顺市| 温州市| 娱乐| 阳原县| 陆丰市| 休宁县| 吉木萨尔县| 镇原县| 南漳县| 泰顺县| 噶尔县| 彭泽县| 清苑县| 登封市| 沿河| 安陆市| 安塞县| 大宁县| 封开县| 满城县| 汤原县| 平舆县| 郴州市| 方城县| 白银市| 台南市| 赞皇县|