欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Oracle学习笔记大全.doc

    • 资源ID:52765764       资源大小:227.50KB        全文页数:92页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Oracle学习笔记大全.doc

    一:sql语句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 ccwhere c.owner = upper('&table_owner') and c.table_name = upper('&table_name')and c.owner = cc.owner and c.constraint_name = cc.constraint_nameorder by cc.position; 5、删除主键或外键alter table TABLE_NAME drop constraint KEY_NAME;6、建外键单字段时:create table 表名 (col1 char(8),cno char(4) REFERENCE course);多个字段时,在最后加上 Foreign Key (字段名) REFERENCE 表名(字段)IXDBA.NET社区论坛连带删除选项 (on delete cascade当指定时,如果父表中的记录被删除,则依赖于父表的记录也被删除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、创建序列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、删除重复行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开发中的分页显示)select * from ( select rownum row_id,b.* from (select a.* from sys_oper a) b )where row_id between 15 and 2015、对公共授予访问权grant select on 表名 to public;create public synonym 同义词名 for 表名;16、填加注释comment on table 表名 is '注释'comment on column 表名.列名 is '注释'17、分布式数据库,创建数据库链路create public database link LINKNAME connect to USERNAME identified by PASSWORDusing 'CONNECT_STRING'可以在服务器端,也可以在客户端建立,但必须注意,两台服务器之间数据库必须可以互访,必须各有各自的别名数据库18、查看数据库链路select * from all_db_links;select * from user_db_links;查询 select * from TABLENAMEDBLNKNAME;创建远程数据库同义词create synonym for TABLENAMEDBLNKNAME;操纵远程数据库记录insert into TABLENAMEDBLNKNAME (a,b) values (va,vb);update TABLENAMEDBLNKNAME set a='this'delete from TABLENAMEDBLNKNAME;怎样执行远程的内嵌过程beginotherdbproto_html(参数);end;19、数据库链路用户密码有特殊字符的时候,可以用双引号把密码引起来create public database link dblink1 connect to db1 identified by "123*456" using 'db11'20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。<1>下面的语句可以进行总计select region_code,count(*) from aicbs.acc_woff_notifygroup by rollup(region_code);<2> 对第1个字段小计,最后合计select region_code,write_status,count(*) from aicbs.acc_woff_notifygroup by rollup(region_code,write_status);-570 0 3570 1 2570 5 -此处小计了570的记录571 0 10571 1 2571 12 -此处小计了571的记录.100 -此处有总计<3> 复合rollup表达式,只做总计select region_code,write_status,count(*) from aicbs.acc_woff_notifygroup by rollup(region_code,write_status);<4> 对第1个字段小计,再对第2个字段小计,最后合计select region_code,write_status,count(*) from aicbs.acc_woff_notifygroup by cube(region_code,write_status);-100 -此处有总计0 60 -对write_status0的小计1 39 -对write_status1的小计3 1 -对write_status3的小计570 5 -此处小计了570的记录570 0 3570 1 2571 12 -此处小计了571的记录571 0 10571 1 2.<3> 复合cube表达式,只做总计select region_code,write_status,count(*) from aicbs.acc_woff_notifygroup by cube(region_code,write_status);<4>下面的语句可以按照rollup不同的字段进行小计select region_code,write_status,count(*) from aicbs.acc_woff_notifygroup by region_code,rollup(write_status);21.查询view的创建语句sql>set long 1000sql>select * from user_views where view_name='MY_VIEW_NAME'orsql>select * from all_views where view_name='MY_VIEW_NAME'22、去除数据库中特殊字符<1>.字符串字段中含有"'",如果用来组合sql语句,会造成语句不准确。比如:replace(f1,'''','')<2>.字符串字段中含有"t n",如果用来在c或者c程序中输出到文件,格式无法保证。比如:replace(f2,'t','')<3>.清除换行和回车比如: replace(f2,chr(13)|chr(10),'')23、如何在字符串里加回车或者tab键 在sqlplus中执行sql>select 'UserId='|chr(10)|'AccId=13431'|chr(9)|'AccId2=11111' from dual;24、树形查询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,levelfrom zjstart with sjbm=0connect by prior bm = sjbm或者select bm,bmmc,sjbm,levelfrom zjstart with sjbm=0connect by sjbm = prior bm 25、快照create snapshot SNAPSHOT_NAME storage (storage parameter)tablespace TABLESPACE_NAMErefresh fastcompleteforcestart with START_DATE next NEXT_DATEas QUERY;create snapshot snapshot_to_study as select * from TABLE_NAMEto_study;创建角色create role aa identified by aaa;授权 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 ato_html;删除 drop snapshot snap_to_html手工刷新快照,(调用DBMS_SNAPSHOT包中的refresh过程)DBMS_SNAPSHOT.refresh(snapshot_name,refresh_type);beginDBMS_SNAPSHOT.REFRESH('snap_to_html','c');end;对所有快照进行刷新beginDBMS_SNAPSHOT.REFRESH_ALL;end;怎样执行远程的内嵌过程beginotherdbproto_html(参数);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>.查看当前用户的缺省表空间SQL>select username,default_tablespace from user_users;<2>生成用户时指定缺省表空间create user 用户名 identified by 口令 default tablespace 表空间名;<3>重新指定用户的缺省表空间alter user 用户名 default tablespace 表空间名<4>查看当前用户的角色SQL>select * from user_role_privs;<5>查看当前用户的系统权限和表级权限SQL>select * from user_sys_privs;SQL>select * from user_tab_privs;<6>查看用户下所有的表SQL>select * from user_tables;<7> alter user语句的quota子句限制用户的磁盘空间如:alter user jf quota 10M on system;27、查看放在ORACLE的内存区里的表 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;关键字(primary key)必须是非空,表中记录的唯一性not null 非空约束default 缺省值约束check 检查约束,使列的值符合一定的标准范围unqiue 唯一性约束foreign key 外部键约束29、查看创建视图的select语句SQL>set view_name,text_length from user_views;SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小SQL>select text from user_views where view_name=upper('&view_name');30、查看同义词的名称SQL>select * from user_synonyms;31、用Sql语句实现查找一列中第N大值 select * from (select t.*,dense_rank() over (order by sal) rank from employee) where rank = N;32 虚拟自段<1>. CURRVAL 和 nextval为表创建序列CREATE SEQUENCE EMPSEQ . ;SELECT empseq.currval FROM DUAL ;自动插入序列的数值INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK', 7902, SYSDATE, 1200, NULL, 20) ;<2>. ROWNUM按设定排序的行的序号SELECT * FROM emp WHERE ROWNUM < 10 ;<3>. ROWID返回行的物理地址SELECT ROWID, ename FROM emp WHERE deptno = 20 ;33、对CLOB字段进行全文检索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 方式建表的时候,指定表参数create table astorage(initial 1M /*第一次创建时分配空间*/next 1M /*第一次分配的存储空间用完时在分配*/)as select * from b;<4>.创建临时表sql> create global temporary table xay_temp as select * from xay; on commit preserve rows/on commit delete rows 在Oracle中,可以创建以下两种临时表:a 会话特有的临时表:create global temporary table () on commit preserve rows;会话指定,当中断会话时ORACLE将截断表b 事务特有的临时表:create global temporary table () on commit delete rows;事务指定,每次提交后ORACLE将截断表(删除全部行) c 说明临时表只在当前连接内有效 临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用 数据处理比较复杂的时候时表快,反之视图快点 在仅仅查询数据的时候建议用游标: 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_tabs37. 中文是如何排序的? Oracle9i之前,中文是按照二进制编码进行排序的。 在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值 SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序 SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序 SCHINESE_PINYIN_M 按照拼音排序 38. 数据表中的字段最大数:表或视图中的最大列数为 100039. oracle中的裸设备:裸设备就是绕过文件系统直接访问的储存空间40. 在Oracle服务器上通过SQLPLUS查看本机IP地址 ? select sys_context('userenv','ip_address') from dual; 如果是登陆本机数据库,只能返回127.0.0.141. 在ORACLE中取毫秒? 9i之前不支持,9i开始有timestamp. 9i可以用select systimestamp from dual;42. 将N秒转换为时分秒格式? set serverout on declare N number := ; ret varchar2(100); begin ret := trunc(n/3600) | '小时' | to_char(to_date(mod(n,3600),'sssss'),'fmmi"分 "ss"秒"') ; dbms_output.put_line(ret); end; 43、在某个用户下找所有的索引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的效率比较低。特别是数据量大的时候,几乎不能执行。用下面几种方式可以替换写法比如要查询在fee_rev_info表中已经销户的用户(不在cm_user中的)(不过下面的例子不是很好,因为bill_id是cm_user的唯一索引)select * from fee_rev_info where bill_id not in (select bill_id from cm_user) <1> 用not existsselect * 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 bwhere a.bill_id = b.bill_id (+)and b.bill_id is null<3> 用hash_ajselect /*+HASH_AJ*/* from fee_rev_info where bill_id not in (select bill_id from cm_user) 45.怎么样查询特殊字符,如通配符%与_假如数据库中有表 STATIONTYPE,STATION_571 STATION_572 . select * from tab where tname like 'STATION_%'会显示 STATIONTYPE,STATION_571 . 可以用下面的语句select * from tab where tname like 'STATION_%' escape''46.如果存在就更新,不存在就插入可以用一个语句实现吗9i已经支持了,是Merge,但是只支持select子查询,如果是单条数据记录,可以写作select . from dual的子查询。语法为:MERGE INTO tableUSING data_sourceON (condition)WHEN MATCHED THEN update_clauseWHEN NOT MATCHED THEN insert_clause;如MERGE INTO cm_user_credit USING (select * from dual) ON (user_id = )when MATCHED then update set credit_value = 1000when NOT MATCHED then insert (user_id,acc_id,bill_id,plan_id,region_code,credit_value) values(,'','571',1000);47.怎么实现一条记录根据条件多表插入9i以上可以通过Insert all语句完成,仅仅是一个语句,如:INSERT ALLWHEN (id=1) THENINTO table_1 (id, name)values(id,name)WHEN (id=2) THENINTO table_2 (id, name)values(id,name)ELSEINTO table_other (id, name)values(id, name)SELECT id,nameFROM a;如果没有条件的话,则完成每个表的插入,如INSERT ALLINTO 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,nameFROM a;48.如何实现行列转换<1>、固定列数的行列转换如student subject grade-student1 语文 80student1 数学 70student1 英语 60student2 语文 90student2 数学 80student2 英语 100.转换为 语文 数学 英语student1 80 70 60student2 90 80 100.语句如下:select student,sum(decode(subject,'语文', grade,null) "语文",sum(decode(subject,'数学', grade,null) "数学",sum(decode(subject,'英语', grade,null) "英语"from tablegroup by student<2>、不定列行列转换如c1 c2-1 我1 是1 谁2 知2 道3 不.转换为1 我是谁2 知道3 不这一类型的转换必须借助于PL/SQL来完成,这里给一个例子CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER) RETURN VARCHAR2 IS Col_c2 VARCHAR2(4000); BEGINFOR 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_nu

    注意事项

    本文(Oracle学习笔记大全.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开