打印本文 打印本文 关闭窗口 关闭窗口
我的oracle笔记一(sql语句方面)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3235  更新时间:2009/4/22 22:03:42  文章录入:mintao  责任编辑:mintao
nsert 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)]
       [tablespace  TABLESPACE_NAME]
       [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;
   创建角色
     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 a@to_html;
   删除  drop snapshot snap_to_html
   手工刷新快照,(调用DBMS_SNAPSHOT包中的refresh过程)DBMS_SNAPSHOT.refresh(snapshot_name,refresh_type);
       begin
          DBMS_SNAPSHOT.REFRESH(''''snap_to_html'''',''''c'''');
       end;
   对所有快照进行刷新
       begin
          DBMS_SNAPSHOT.REFRESH_ALL;
       end;
   怎样执行远程的内嵌过程
       begin
         otherdbpro@to_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 a
      storage(
              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_tabs

37. 中文是如何排序的?

Oracle9i之前,中文是按照二进制编码进行排序的。
在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值
SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序

38. 数据表中的字段最大数:
表或视图中的最大列数为 1000


39. oracle中的裸设备:
  裸设备就是绕过文件系统直接访问的储存空间

40. 在Oracle服务器上通过SQLPLUS查看本机IP地址 ?
select sys_context(''''userenv'''',''''ip_address'''') from dual;
如果是登陆本机数据库,只能返回127.0.0.1

41. 在ORACLE中取毫秒?
   9i之前不支持,9i开始有timestamp.
   9i可以用select systimestamp from dual;

42. 将N秒转换为时分秒格式?
   set serverout on
   declare
   N number := 1000000;
   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、在某个用户下找所有

上一页  [1] [2] [3] [4]  下一页

打印本文 打印本文 关闭窗口 关闭窗口