|
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)
數(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é)果為:
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)
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)
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)
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)
<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)
數(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)
今天在選擇一條記錄進(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)
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)
最近看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)
|