posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          ORACLE筆記 sql語(yǔ)句 (轉(zhuǎn))

          Posted on 2007-04-12 18:09 G_G 閱讀(1348) 評(píng)論(1)  編輯  收藏 所屬分類: Database
           --================================================
            --==================================== 一.sql語(yǔ)句
            --================================================
            1.增加主鍵
             alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN);
             指定表空間
             alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN) using index tablespace TABLE_SPACE_NAME;
            2.增加外鍵
             alter table TABLE_NAME add constraint FK_NAME foreign key (TABLE_COLUMN) references KEY_TABLE_NAME;
            3.使主鍵或外鍵失效、生效
             alter table TABLE_NAME disable(enable) constraint KEY_NAME;
            4、查看各種約束
             select constraint_name,table_name,constraint_type,status from user_constraints;
          select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper('&table_name')
             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;
            5、刪除主鍵或外鍵
             alter table TABLE_NAME drop constraint KEY_NAME;
            6、建外鍵
             單字段時(shí):create table 表名 (col1 char(8),
             cno char(4) REFERENCE course);
             多個(gè)字段時(shí),在最后加上 Foreign Key (字段名) REFERENCE 表名(字段)
             連帶刪除選項(xiàng) (on delete cascade
             當(dāng)指定時(shí),如果父表中的記錄被刪除,則依賴于父表的記錄也被刪除
             REFERENCE 表名() on delete cascade;
            7、刪除帶約束的表
             Drop table 表名 cascade constraints;
            8:索引管理
            <1>.creating function-based indexes
            sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);
            <2>.create a B-tree index
            sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace
            sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]
            sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0
            sql> maxextents 50);
            <3>.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows
            <4>.creating reverse key indexes
            sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k
            sql> next 200k pctincrease 0 maxextents 50) tablespace indx;
            <5>.create bitmap index
            sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k
            sql> pctincrease 0 maxextents 50) tablespace indx;
            <6>.change storage parameter of index
            sql> alter index xay_id storage (next 400k maxextents 100);
            7.allocating index space
            sql> alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf');
            <8>.alter index xay_id deallocate unused;
            <9>、查看索引
             SQL>select index_name,index_type,table_name from user_indexes order by table_name;
            <10>、查看索引被索引的字段
             SQL>select * from user_ind_columns where index_name=upper('&index_name');
            11、創(chuàng)建序列
             select * from user_sequences;
             create sequence SEQ_NAME start with 1000
             maxvalue 1000 increment by 1;
             alter sequence SEQ_NAME minvalue 50 maxvalue 100;
            12、刪除重復(fù)行
             update a set aa=null where aa is not null;
            
             delete from a where rowid!=
             (select max(rowid) from a b where a.aa=b.aa);
            13、刪除同其他表相同的行
             delete from a where exits
             (select 'X' from b where b.no=a.no);
             或
             delete from a where no in (select no from b);
            14、查詢從多少行到多少行的記錄(可以用在web開(kāi)發(fā)中的分頁(yè)顯示)
             select * from ( select rownum row_id,b.* from (select a.* from sys_oper a) b )
             where row_id between 15 and 20
            15、對(duì)公共授予訪問(wèn)權(quán)
             grant select on 表名 to public;
             create public synonym 同義詞名 for 表名;
            16、填加注釋
             comment on table 表名 is '注釋';
             comment on column 表名.列名 is '注釋';
            17、分布式數(shù)據(jù)庫(kù),創(chuàng)建數(shù)據(jù)庫(kù)鏈路
             create [public] database link LINKNAME
             [connect to USERNAME identified by PASSWORD]
             [using 'CONNECT_STRING']
             可以在服務(wù)器端,也可以在客戶端建立,但必須注意,兩臺(tái)服務(wù)器之間
             數(shù)據(jù)庫(kù)必須可以互訪,必須各有各自的別名數(shù)據(jù)庫(kù)
            18、查看數(shù)據(jù)庫(kù)鏈路
             select * from all_db_links;
             select * from user_db_links;
             查詢 select * from TABLENAME@DBLNKNAME;
             創(chuàng)建遠(yuǎn)程數(shù)據(jù)庫(kù)同義詞
             create synonym for TABLENAME@DBLNKNAME;
             操縱遠(yuǎn)程數(shù)據(jù)庫(kù)記錄
             insert into TABLENAME@DBLNKNAME (a,b) values (va,vb);
             update TABLENAME@DBLNKNAME set a='this';
             delete from TABLENAME@DBLNKNAME;
             怎樣執(zhí)行遠(yuǎn)程的內(nèi)嵌過(guò)程
             begin
             otherdbpro@to_html(參數(shù));
             end;
            19、數(shù)據(jù)庫(kù)鏈路用戶密碼有特殊字符的時(shí)候,可以用雙引號(hào)把密碼引起來(lái)
            create public database link dblink1 connect to db1 identified by "123*456" using 'db11'
            20.oracle8中擴(kuò)充了group by rollup和cube的操作。有時(shí)候省了你好多功夫的。
             <1>下面的語(yǔ)句可以進(jìn)行總計(jì)
             select region_code,count(*) from aicbs.acc_woff_notify
             group by rollup(region_code);
             <2> 對(duì)第1個(gè)字段小計(jì),最后合計(jì)
             select region_code,write_status,count(*) from aicbs.acc_woff_notify
             group by rollup(region_code,write_status);
             ----------------------
             570 0 3
             570 1 2
             570 5 --此處小計(jì)了570的記錄
             571 0 10
             571 1 2
             571 12 --此處小計(jì)了571的記錄
             .....
             100 --此處有總計(jì)
             <3> 復(fù)合rollup表達(dá)式,只做總計(jì)
             select region_code,write_status,count(*) from aicbs.acc_woff_notify
             group by rollup(region_code,write_status);
            
             <4> 對(duì)第1個(gè)字段小計(jì),再對(duì)第2個(gè)字段小計(jì),最后合計(jì)
             select region_code,write_status,count(*) from aicbs.acc_woff_notify
             group by cube(region_code,write_status);
             ----------------------
             100 --此處有總計(jì)
             0 60 --對(duì)write_status=0的小計(jì)
             1 39 --對(duì)write_status=1的小計(jì)
             3 1 --對(duì)write_status=3的小計(jì)
             570 5 --此處小計(jì)了570的記錄
             570 0 3
             570 1 2
             571 12 --此處小計(jì)了571的記錄
             571 0 10
             571 1 2
             ....
             <3> 復(fù)合cube表達(dá)式,只做總計(jì)
             select region_code,write_status,count(*) from aicbs.acc_woff_notify
             group by cube(region_code,write_status);
            
            
             <4>下面的語(yǔ)句可以按照rollup不同的字段進(jìn)行小計(jì)
             select region_code,write_status,count(*) from aicbs.acc_woff_notify
             group by region_code,rollup(write_status);
            21.查詢view的創(chuàng)建語(yǔ)句
             sql>set long 1000
             sql>select * from user_views where view_name='MY_VIEW_NAME';
             or
             sql>select * from all_views where view_name='MY_VIEW_NAME';
            22、去除數(shù)據(jù)庫(kù)中特殊字符
             <1>.字符串字段中含有"'",如果用來(lái)組合sql語(yǔ)句,會(huì)造成語(yǔ)句不準(zhǔn)確。
             比如:replace(f1,'''','')
             <2>.字符串字段中含有"\t \n",如果用來(lái)在c或者c++程序中輸出到文件,格式無(wú)法保證。
             比如:replace(f2,'\t','')
             <3>.清除換行和回車
             比如: replace(f2,chr(13)||chr(10),'')
            23、如何在字符串里加回車或者tab鍵
             在sqlplus中執(zhí)行
             sql>select 'UserId=1233111'||chr(10)||'AccId=13431'||chr(9)||'AccId2=11111' from dual;
            24、樹(shù)形查詢
            create table zj(
            bm number(8),
            bmmc varchar2(20),
            sjbm number(8)
            )
            insert into zj values(1,'aaa',0)
            insert into zj values(11,'aaa1',1)
            insert into zj values(12,'aaa2',1)
            insert into zj values(111,'aaa11',11)
            insert into zj values(112,'aaa12',11)
            insert into zj values(113,'aaa13',11)
            insert into zj values(121,'aaa21',12)
            insert into zj values(122,'aaa22',12)
            insert into zj values(123,'aaa23',12)
            --
            select bm,bmmc,sjbm,level
            from zj
            start with sjbm=0
            connect by prior bm = sjbm
            或者
            select bm,bmmc,sjbm,level
            from zj
            start with sjbm=0
            connect by sjbm = prior bm
            25、快照
             create snapshot SNAPSHOT_NAME
             [storage (storage parameter)]
                [refresh [fast\complete\force]
             [start with START_DATE next NEXT_DATE]
             as QUERY;
            
             create snapshot snapshot_to_study as select * from TABLE_NAME@to_study;
             創(chuàng)建角色
             create role aa identified by aaa;
             授權(quán) grant create snapshot,alter snapshot to aaa;
             grant aaa to emp;
             create snapshot SNAPSHOT_TO_HTML refresh complete start with sysdate next
             sysdate+5/(24*60*60) as select * from a@to_html;
             刪除 drop snapshot snap_to_html
             手工刷新快照,(調(diào)用DBMS_SNAPSHOT包中的refresh過(guò)程)DBMS_SNAPSHOT.refresh(snapshot_name,refresh_type);
             begin
             DBMS_SNAPSHOT.REFRESH('snap_to_html','c');
             end;
             對(duì)所有快照進(jìn)行刷新
             begin
             DBMS_SNAPSHOT.REFRESH_ALL;
             end;
             怎樣執(zhí)行遠(yuǎn)程的內(nèi)嵌過(guò)程
             begin
             otherdbpro@to_html(參數(shù));
             end;
            26、用戶管理
             create a user: database authentication
             sql> create user juncky identified by oracle default tablespace users
             sql> temporary tablespace temp quota 10m on data password expire
             sql> [account lock|unlock] [profile profilename|default];
             <1>.查看當(dāng)前用戶的缺省表空間
             SQL>select username,default_tablespace from user_users;
             <2>生成用戶時(shí)指定缺省表空間
             create user 用戶名 identified by 口令 default tablespace 表空間名;
            
             <3>重新指定用戶的缺省表空間
             alter user 用戶名 default tablespace 表空間名
             <4>查看當(dāng)前用戶的角色
             SQL>select * from user_role_privs;
             <5>查看當(dāng)前用戶的系統(tǒng)權(quán)限和表級(jí)權(quán)限
             SQL>select * from user_sys_privs;
             SQL>select * from user_tab_privs;
             <6>查看用戶下所有的表
             SQL>select * from user_tables;
             <7> alter user語(yǔ)句的quota子句限制用戶的磁盤空間
             如:alter user jf quota 10M on system;
            27、查看放在ORACLE的內(nèi)存區(qū)里的表
             SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
            28、約束條件
             create table employee
             (empno number(10) primary key,
             name varchar2(40) not null,
             deptno number(2) default 10,
             salary number(7,2) check salary<10000,
             birth_date date,
             soc_see_num char(9) unique,
             foreign key(deptno) references dept.deptno)
             tablespace users;
            
             關(guān)鍵字(primary key)必須是非空,表中記錄的唯一性
             not null 非空約束
             default 缺省值約束
             check 檢查約束,使列的值符合一定的標(biāo)準(zhǔn)范圍
             unqiue 唯一性約束
             foreign key 外部鍵約束
            29、查看創(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');
            30、查看同義詞的名稱
             SQL>select * from user_synonyms;
            31、用Sql語(yǔ)句實(shí)現(xiàn)查找一列中第N大值
            select * from
            (select t.*,dense_rank() over (order by sal) rank from employee)
            where rank = N;
            32 虛擬自段
             <1>. CURRVAL 和 nextval
             為表創(chuàng)建序列
             CREATE SEQUENCE EMPSEQ ... ;
             SELECT empseq.currval FROM DUAL ;
             自動(dòng)插入序列的數(shù)值
             INSERT INTO emp
             VALUES (empseq.nextval, 'LEWIS', 'CLERK',
             7902, SYSDATE, 1200, NULL, 20) ;
             <2>. ROWNUM
             按設(shè)定排序的行的序號(hào)
             SELECT * FROM emp WHERE ROWNUM < 10 ;
             <3>. ROWID
             返回行的物理地址
             SELECT ROWID, ename FROM emp WHERE deptno = 20 ;
            33、對(duì)CLOB字段進(jìn)行全文檢索
            SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)>0;
            34. 特殊字符的插入,比如"&"
            insert into a values (translate ('at{&}t','at{}','at'));
            35.表管理
             <1>.create a table
             sql> create table table_name (column datatype,column datatype]....)
             sql> tablespace tablespace_name [pctfree integer] [pctused integer]
             sql> [initrans integer] [maxtrans integer]
             sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)
             sql> [logging|nologging] [cache|nocache]
             <2>.copy an existing table
             sql> create table table_name [logging|nologging] as subquery
            
             <3> create table ... as 方式建表的時(shí)候,指定表參數(shù)
             create table a
             storage(
             initial 1M /*第一次創(chuàng)建時(shí)分配空間*/
             next 1M /*第一次分配的存儲(chǔ)空間用完時(shí)在分配*/
             )
             as select * from b;
             <4>.創(chuàng)建臨時(shí)表
             sql> create global temporary table xay_temp as select * from xay;
             on commit preserve rows/on commit delete rows
             在Oracle中,可以創(chuàng)建以下兩種臨時(shí)表:
             a 會(huì)話特有的臨時(shí)表:
             create global temporary table () on commit preserve rows;
             會(huì)話指定,當(dāng)中斷會(huì)話時(shí)ORACLE將截?cái)啾?br />   b 事務(wù)特有的臨時(shí)表:
             create global temporary table () on commit delete rows;
             事務(wù)指定,每次提交后ORACLE將截?cái)啾恚▌h除全部行)
             c 說(shuō)明
             臨時(shí)表只在當(dāng)前連接內(nèi)有效
            臨時(shí)表不建立索引,所以如果數(shù)據(jù)量比較大或進(jìn)行多次查詢時(shí),不推薦使用
            數(shù)據(jù)處理比較復(fù)雜的時(shí)候時(shí)表快,反之視圖快點(diǎn)
            在僅僅查詢數(shù)據(jù)的時(shí)候建議用游標(biāo): open cursor for 'sql clause';
             <5>
             pctfree = (average row size - initial row size) *100 /average row size
             pctused = 100-pctfree- (average row size*100/available data space)
             <6>.change storage and block utilization parameter
             sql> alter table table_name pctfree=30 pctused=50 storage(next 500k
             sql> minextents 2 maxextents 100);
             <7>.manually allocating extents
             sql> alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf');
             <8>.move tablespace
             sql> alter table employee move tablespace users;
             <9>.deallocate of unused space
             sql> alter table table_name deallocate unused [keep integer]
             <10>.drop a column
             sql> alter table table_name drop column comments cascade constraints checkpoint 1000;
             alter table table_name drop columns continue;
             <11>.mark a column as unused
             sql> alter table table_name set unused column comments cascade constraints;
             alter table table_name drop unused columns checkpoint 1000;
             alter table orders drop columns continue checkpoint 1000
             data_dictionary : dba_unused_col_tabs
            37. 中文是如何排序的?
            Oracle9i之前,中文是按照二進(jìn)制編碼進(jìn)行排序的。
            在oracle9i中新增了按照拼音、部首、筆畫排序功能。設(shè)置NLS_SORT值
            SCHINESE_RADICAL_M 按照部首(第一順序)、筆劃(第二順序)排序
            SCHINESE_STROKE_M 按照筆劃(第一順序)、部首(第二順序)排序
            SCHINESE_PINYIN_M 按照拼音排序
            38. 數(shù)據(jù)表中的字段最大數(shù):
            表或視圖中的最大列數(shù)為 1000
            39. oracle中的裸設(shè)備:
             裸設(shè)備就是繞過(guò)文件系統(tǒng)直接訪問(wèn)的儲(chǔ)存空間
            40. 在Oracle服務(wù)器上通過(guò)SQLPLUS查看本機(jī)IP地址 ?
            select sys_context('userenv','ip_address') from dual;
            如果是登陸本機(jī)數(shù)據(jù)庫(kù),只能返回127.0.0.1
            41. 在ORACLE中取毫秒?
             9i之前不支持,9i開(kāi)始有timestamp.
             9i可以用select systimestamp from dual;
            42. 將N秒轉(zhuǎn)換為時(shí)分秒格式?
             set serverout on
             declare
             N number := 1000000;
             ret varchar2(100);
             begin
             ret := trunc(n/3600) || '小時(shí)' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"分 "ss"秒"') ;
             dbms_output.put_line(ret);
             end;
            43、在某個(gè)用戶下找所有的索引
             select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
             from user_ind_columns, user_indexes
             where user_ind_columns.index_name = user_indexes.index_name
             and user_ind_columns.table_name = user_indexes.table_name
             order by user_indexes.table_type, user_indexes.table_name,
             user_indexes.index_name, column_position;
            44. not in的替代。
             一般not in的效率比較低。特別是數(shù)據(jù)量大的時(shí)候,幾乎不能執(zhí)行。
             用下面幾種方式可以替換寫法
             比如要查詢?cè)趂ee_rev_info表中已經(jīng)銷戶的用戶(不在cm_user中的)(不過(guò)下面的例子不是很好,因?yàn)閎ill_id是cm_user的唯一索引)
             select * from fee_rev_info where bill_id not in (select bill_id from cm_user)
             <1> 用not exists
             select * from fee_rev_info a where not exists (select 'p' from cm_user b where b.bill_id = a.bill_id)
             <2> 用外連接(+)
             select a.* from fee_rev_info a,cm_user b
             where a.bill_id = b.bill_id (+)
             and b.bill_id is null
             <3> 用hash_aj
             select /*+HASH_AJ*/* from fee_rev_info where bill_id not in (select bill_id from cm_user)
            45.怎么樣查詢特殊字符,如通配符%與_
            假如數(shù)據(jù)庫(kù)中有表 STATIONTYPE,STATION_571 STATION_572 ...
            select * from tab where tname like 'STATION_%'
            會(huì)顯示 STATIONTYPE,STATION_571 ... 可以用下面的語(yǔ)句
            select * from tab where tname like 'STATION\_%' escape'\'
            46.如果存在就更新,不存在就插入可以用一個(gè)語(yǔ)句實(shí)現(xiàn)嗎
            9i已經(jīng)支持了,是Merge,但是只支持select子查詢,
            如果是單條數(shù)據(jù)記錄,可以寫作select .... from dual的子查詢。
            語(yǔ)法為:
            MERGE INTO table
            USING data_source
            ON (condition)
            WHEN MATCHED THEN update_clause
            WHEN NOT MATCHED THEN insert_clause;
            如
            MERGE INTO cm_user_credit
            USING (select * from dual) ON (user_id =1302514690 )
            when MATCHED then update set credit_value = 1000
          when NOT MATCHED then insert (user_id,acc_id,bill_id,plan_id,region_code,credit_value) values(1302514690,1305032158,'13857141218',10070247,'571',1000);
            47.怎么實(shí)現(xiàn)一條記錄根據(jù)條件多表插入
            9i以上可以通過(guò)Insert all語(yǔ)句完成,僅僅是一個(gè)語(yǔ)句,如:
            INSERT ALL
            WHEN (id=1) THEN
            INTO table_1 (id, name)
            values(id,name)
            WHEN (id=2) THEN
            INTO table_2 (id, name)
            values(id,name)
            ELSE
            INTO table_other (id, name)
            values(id, name)
            SELECT id,name
            FROM a;
            如果沒(méi)有條件的話,則完成每個(gè)表的插入,如
            INSERT ALL
            INTO table_1 (id, name)
            values(id,name)
            INTO table_2 (id, name)
            values(id,name)
            INTO table_other (id, name)
            values(id, name)
            SELECT id,name
            FROM a;
            48.如何實(shí)現(xiàn)行列轉(zhuǎn)換
            <1>、固定列數(shù)的行列轉(zhuǎn)換
            如
            student subject grade
            ---------------------------
            student1 語(yǔ)文 80
            student1 數(shù)學(xué) 70
            student1 英語(yǔ) 60
            student2 語(yǔ)文 90
            student2 數(shù)學(xué) 80
            student2 英語(yǔ) 100
            ...
            轉(zhuǎn)換為
            語(yǔ)文 數(shù)學(xué) 英語(yǔ)
            student1 80 70 60
            student2 90 80 100
            ...
            語(yǔ)句如下:
            select student,sum(decode(subject,'語(yǔ)文', grade,null)) "語(yǔ)文",
            sum(decode(subject,'數(shù)學(xué)', grade,null)) "數(shù)學(xué)",
            sum(decode(subject,'英語(yǔ)', grade,null)) "英語(yǔ)"
            from table
            group by student
            <2>、不定列行列轉(zhuǎn)換
            如
            c1 c2
            --------------
            1 我
            1 是
            1 誰(shuí)
            2 知
            2 道
            3 不
            ...
            轉(zhuǎn)換為
            1 我是誰(shuí)
            2 知道
            3 不
            這一類型的轉(zhuǎn)換必須借助于PL/SQL來(lái)完成,這里給一個(gè)例子
            CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
            RETURN VARCHAR2
            IS
            Col_c2 VARCHAR2(4000);
            BEGIN
            FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP
            Col_c2 := Col_c2||cur.c2;
            END LOOP;
            Col_c2 := rtrim(Col_c2,1);
            RETURN Col_c2;
            END;
            /
            SQL> select distinct c1 ,get_c2(c1) cc2 from table;即可
            --例子:
            create table okcai_1
            (
            user_id varchar2(10),
            user_number varchar2(10),
            user_num number(8)
            )
            user_id user_number user_num
            ---------------------
            1 123 2
            1 456 5
            1 789 6
            2 11 2
            2 22 3
            2 33 4
            2 44 5
            2 55 6
            2 66 7
            2 77 8
            3 1234 1
            3 5678 2
            方式一:
            create or replace function get_col(
             p_userId number,
             p_col number
            ) return varchar
            as
            v_tmp varchar2(255);
            begin
             select user_number||chr(9)||user_num into v_tmp
             from
             (select user_number,user_num,rownum row_id
             from okcai_1
             where user_id = p_userId) a
             where row_id = p_col;
             return ltrim(v_tmp);
             --return v_tmp;
            end;
            然后
            select distinct user_id,get_col(user_id,1),get_col(user_id,2),get_col(user_id,3) .... from okcai_1
            方式二:
            create or replace function get_col(
             p_userId number,
             p_col number
            ) return varchar
            as
            v_tmp varchar2(255);
            begin
             select user_number||chr(9)||user_num into v_tmp
             from
             (select user_number,user_num,rownum row_id
             from okcai_1
             where user_id = p_userId) a
             where row_id = p_col;
             return ltrim(v_tmp);
             --return v_tmp;
            end;
            select distinct user_id,get_col_new(user_id) from okcai_1;
            49.怎么設(shè)置存儲(chǔ)過(guò)程的調(diào)用者權(quán)限
            普通存儲(chǔ)過(guò)程都是所有者權(quán)限,如果想設(shè)置調(diào)用者權(quán)限,請(qǐng)參考如下語(yǔ)句
            create or replace
            procedure ...()
            AUTHID CURRENT_USER
            As
            begin
            ...
            end;
            50.Oracle有哪些常見(jiàn)關(guān)鍵字
            詳細(xì)信息可以查看v$reserved_words視圖
            51.怎么查看數(shù)據(jù)庫(kù)參數(shù)
            <1> show parameter 參數(shù)名
            如通過(guò)show parameter spfile可以查看9i是否使用spfile文件
            其中參數(shù)名是可以匹配的。
            比如show parameter cursor ,則會(huì)顯示跟cursor相關(guān)的參數(shù)
            <2>
            select * from v$parameter
            <3>
            除了這部分參數(shù),Oracle還有大量隱含參數(shù),可以通過(guò)如下語(yǔ)句查看:
            SELECT NAME
            ,VALUE
            ,decode(isdefault, 'TRUE','Y','N') as "Default"
            ,decode(ISEM,'TRUE','Y','N') as SesMod
            ,decode(ISYM,'IMMEDIATE', 'I',
            'DEFERRED', 'D',
            'FALSE', 'N') as SysMod
            ,decode(IMOD,'MODIFIED','U',
            'SYS_MODIFIED','S','N') as Modified
            ,decode(IADJ,'TRUE','Y','N') as Adjusted
            ,description
            FROM ( --GV$SYSTEM_PARAMETER
            SELECT x.inst_id as instance
            ,x.indx+1
            ,ksppinm as NAME
            ,ksppity
            ,ksppstvl as VALUE
            ,ksppstdf as isdefault
            ,decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE') as ISEM
            ,decode(bitand(ksppiflg/65536,3),
            1,'IMMEDIATE',2,'DEFERRED','FALSE') as ISYM
            ,decode(bitand(ksppstvf,7),1,'MODIFIED','FALSE') as IMOD
            ,decode(bitand(ksppstvf,2),2,'TRUE','FALSE') as IADJ
            ,ksppdesc as DESCRIPTION
            FROM x$ksppi x
            ,x$ksppsv y
            WHERE x.indx = y.indx
            AND substr(ksppinm,1,1) = '_'
            AND x.inst_id = USERENV('Instance')
            )
            ORDER BY NAME
            52.怎樣建立基于函數(shù)索引
            8i以上版本,確保
            Query_rewrite_enabled=true
            Query_rewrite_integrity=trusted
            Compatible=8.1.0以上
            Create index indexname on table (function(field));
            53.怎么樣移動(dòng)表或表分區(qū)
            [A]移動(dòng)表的語(yǔ)法
            Alter table tablename move
            [Tablespace new_name
            Storage(initial 50M next 50M
            pctincrease 0 pctfree 10 pctused 50 initrans 2) nologging]
            移動(dòng)分區(qū)的語(yǔ)法
            alter table tablename move (partition partname)
            [update global indexes]
            之后之后必須重建索引
            Alter index indexname rebuild
            如果表有Lob段,那么正常的Alter不能移動(dòng)Lob段到別的表空間,而僅僅是移動(dòng)了表段,可以采用如下的方法移動(dòng)Lob段
            alter table tablename move
            lob(lobsegname) store as (tablespace newts);
            54.怎么樣修改表的列名
            [A]9i以上版本可以采用rname命令
            ALTER TABLE UserName.TabName
            RENAME COLUMN SourceColumn TO DestColumn
            9i以下版本可以采用create table …… as select * from SourceTable的方式。
            另外,8i以上可以支持刪除列了
            ALTER TABLE UserName.TabName
            SET UNUSED (ColumnName) CASCADE CONSTRAINTS
            ALTER TABLE UserName.TabName
            DROP (ColumnName) CASCADE CONSTRAINTS
            55.case的用法
            在sql語(yǔ)句中
            CASE test_value
            WHEN expression1 THEN value1
            [[WHEN expression2 THEN value2] [...]]
            [ELSE default_value]
            END
            比如1
            SELECT last_name, job_id, salary
             CASE job_id
             WHEN 'IT_PROG' THEN 1.10*salary
             WHEN 'ST_CLERK' THEN 1.15*salary
             WHEN 'SA_REP' THEN 1.20*salary
             ELSE salary END "REVISED_SALARY"
            FROM employees
            比如2
            select
             case
             when real_charge>=20000 and real_charge<30000 then 5000
             when real_charge>=30000 and real_charge<40000 then 9000
             when real_charge>=40000 and real_charge<50000 then 10000
             when real_charge>=50000 and real_charge<60000 then 14000
             when real_charge>=60000 and real_charge<70000 then 18000
             when real_charge>=70000 and real_charge<80000 then 19000
             when real_charge>=80000 and real_charge<90000 then 24000
             when real_charge>=90000 and real_charge<100000 then 27000
             when real_charge>=100000 and real_charge<110000 then 27000
             when real_charge>=110000 and real_charge<120000 then 29000
             when real_charge>=120000 then 36000
             else
             0
             end ,acc_id,user_id,real_charge from okcai_jh_charge_200505
            在存儲(chǔ)過(guò)程中
             case v_strGroupClassCode
             when '1' then
             v_nAttrNum := v_nAttrNum + 300;
             v_strAttrFlag := '1'||substr(v_strAttrFlag,2,7);
             when '2' then
             v_nAttrNum := v_nAttrNum + 200;
             v_strAttrFlag := '2'||substr(v_strAttrFlag,2,7);
             else
             NULL;
             end case;
            注意的是存儲(chǔ)過(guò)程和sql語(yǔ)句有的細(xì)微差別是用end case,而不是end。語(yǔ)句后面跟";"

          評(píng)論

          # 時(shí)間范圍   回復(fù)  更多評(píng)論   

          2007-05-15 09:20 by G_G
          select {z.*} from jcyy.z_jcyy_basepersonnel z where to_date(to_char(ENTERDEPOTTIME,'yyyy-mm'),'yyyy-mm') = to_date('"+dateY_M+"','yyyy-mm') or  to_date(to_char(OFFDEPOTDATE,'yyyy-mm'),'yyyy-mm') = to_date('"+dateY_M+"','yyyy-mm')
          主站蜘蛛池模板: 洛宁县| 乌兰浩特市| 衡水市| 沭阳县| 齐齐哈尔市| 吴堡县| 高密市| 云龙县| 洮南市| 武穴市| 苍溪县| 高安市| 肇庆市| 古蔺县| 客服| 苏尼特左旗| 肥乡县| 古交市| 合肥市| 双辽市| 宁化县| 郯城县| 江都市| 博湖县| 清水县| 盐津县| 河南省| 乐平市| 恭城| 互助| 聊城市| 咸阳市| 舞钢市| 梁河县| 庆安县| 岳阳县| 改则县| 滦平县| 镇平县| 城口县| 丹棱县|