zoukankan      html  css  js  c++  java
  • Oracle 基础知识

    SQLDevelop

    1. 查看数据库版本 :  select  *  from   v$version;

    2. 查看表结构:        desc     TABLE_NAME

    3. 查看当前连接用户:  select  *  from  v$session;     (show user;  在SQLPlus中显示当前用户名)

    4. 查看当前被锁定的表:

    SELECT    OSUSER, machine, object_name, s.sid, s.serial#
    FROM      gv$locked_object l  ,  
                  dba_objects     o,    
                gv$session    s
    WHERE    l.object_id  = o.object_id
    AND               l.session_id = s.sid

    5.   解锁被锁定的表: alter system kill session 'sid, serial#';     (e.g:  : alter system kill session  '23, 4561'  )

    6.   NVL函数,处理空值null :    SELECT   id,   NVL(name, 'name_is_null')  from  STU1;   -- 如果STU1表中,name字段为null, 则用name_is_null替换.

    7. 查询当前用户下是否有某个表: SELECT  COUNT(1)  FROM USER_TABLES  WHERE TABLE_NAME='STU12'; --如果存在为1, 不存在为0

    8. 查询某个用户下是否有某个表:  select count(1) from dba_tables  where   owner = 'USER_NAME' and table_name = 'TABLE_NAME';

    9. 查看当前用户下是否有某个(Package/Procedure/Function) :

         SELECT   *  FROM  USER_PROCEDURES   OBJECT_TYPE=' FUNCTION| PROCEDURE | PACKAGE'

    10. 查看所有用户  SELECT  *  FROM  all_users;

     11. Sequence 的用法

    create sequence  mysql
     START WITH      1  
     INCREMENT  BY  1
     NOMAXVALUE  
     NOMINVALUE
     NOCYCLE     -- if CYCLE 1000 表示增长到1000之后又从1开始
     NOCACHE     

       12.    union,  union all,  intersect,  minus 的操作

    - union all  将结果集累加  (包含重复记录)
    SELECT * FROM  STU1
    union all
    SELECT * FROM STU2
    -- union     将结果集累加(去除重复)
    SELECT * FROM  STU1
    union  
    SELECT * FROM STU2
    
    -- intersect  去结果集的: 交集
    SELECT * FROM  STU1
    intersect   
    SELECT * FROM STU2
    
    -- minus  去结果集的: 差集 (将第一个select所得结果, 减去 所有出现在 第二select的结果)
    SELECT * FROM  STU1
    minus   
    SELECT * FROM STU2

     13.   oracle  数据的五种对象:别名(synonym) ,  序列(Sequence),  视图(View),  索引(Index)  ,  族(cluser).

    14.   sign(num)的用法:

      if  num > 0,   sign(num) =1;

      if  num =0,   sign(num) =0;

      if  num <0 , sign(num) = -1;

    15. decode 函数用法:

    Usage#1:    decode( expression , search , result [, search , result]... [, default] )
    select  decode(id,   1, '#1', 
    2, '#2',
    3, '#3',
    4, '#4',
    '#Default NO#'),
    name
    from STU1; -- 将id为1,2,3,4分别转义为#1,#2,#3,#4, 如果不是1,2,3,4则转换为 #Default NO#

      Usage#2:  decode((date1 - date2) - abs(date1 - date2), 0, date2, date1)  --  比较2个中大小,返回较小的一个

      Usage#3: 结合sign(num)函数,判断学生成绩 >=80 为优秀, 60<=  score <80  为良好,  socre < 60 为不及格

      select  id, name ,score, decode(sign(score-80), 1 , '优秀', 0, '优秀', -1, 
                                                                                 decode(sign(score-60), 1, '良好', 0, '良好', -1 ,'不及格') )
       from STU1; 

     16.  trunc( number, [ decimal_places ] ) 用法(decimal_places必须为>=0的整数,将number后面多余的位数抹掉,不足的位数,保留原有的摸样)

    trunc(125.815)        would return 125
    trunc(125.815, 0)     would return 125
    trunc(125.815, 1)     would return 125.8
    trunc(125.815, 2)     would return 125.81
    trunc(125.81, 3)      would return 125.81
    trunc(-125.815, 2)    would return -125.81
    trunc(125.815, -1)    would return 120
    trunc(125.815, -2)    would return 100
    trunc(125.81, -3)     would return 0
    
     如果decimal_places 大于number 本身的小数位数,返回原数字不会加0.
     如:trunc(125.81,3) would return 125.81;
     如果decimal_places 为负数,那么将指定的位数设置为0

     17.  查询哪些用户连接到数据库了,并且他们的IP地址分别是什么?

        17-1.   缺省从 v$session 中不能直接获得客户端 IP,可以在数据库中创建一个追踪客户端IP地址的触发器:

    create or replace trigger on_logon_trigger after logon on database  
    begin  
        dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));  
    end;

        17-2.  退出之后,当用户重新登录时,可以查看IP地址

        select sid,serial#,username,program,machine,client_info  
        from   v$session  
        where  username is not null  
        order   by username,program,machine;   

     18.  SYSTEM  用户忘记密码

    D:oracleproduct11.2.0dbhome_1BIN>sqlplus /nolog
    
    SQL*Plus: Release 11.2.0.1.0 Production on 星期四 7月 25 14:35:36 2013
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    SQL> conn /as sysdba
    已连接。
    SQL> alter user SYSTEM identified by  新密码;
    
    用户已更改。
    
    SQL> exit

     19.  复制表

    ORACLE 如果表不存在:   
      只复制表结构:create table T_COLUMN_BK as select * from T_COLUMN WHERE 1<>1; //如果只是复制部分字段,可以用具体的字段列表代替 *
      表结构+数据: create table T_COLUMN_BK as select * from T_COLUMN ;           //如果只是复制部分字段,可以用具体的字段列表代替 *

    ORACLE 如果表已经存在:
    复制表数据: INSERT INTO T_COLUMN_BK SELECT * FROM T_COLUMN

     20.   查询当前数据库实例名称:     SELECT    instance_name   FROM   v$instance; 

     21,   查询当前数据库名称:           SELECT    name      FROM   v$database; 

              默认情况下,数据库实例名称和数据库名称相同。

    22.   NVL() 函数的使用

          -- NVL(expr1,  expr2)        if   expr1==null,  return expr2;    e.g:     NVL(null, 'aa' )   ---> aa ;

                                                 if   expr1 != null,  return expr1;  e.g :     NVL('xx', 'aa' )----> xx  

        -- NVL2(expr,  expr1,  expr2)       if  expr == null,    return expr2;    e.g:   NVL2(null, 'aa', 'bb')   ----->bb

                                                         if  expr != null,     return  expr1;    e.g:   NVL2('xxx', 'aa', 'bb')  ---->aa

  • 相关阅读:
    【笔记】关于全栈开发、技术发展方向,软件开发模式的思考
    转 mysql 自动安装部署
    转shell不能执行su 后的脚本
    11.2 rman 备份 放在DG 库上跑,可能遇到的问题。
    highchart 学习
    每周定时备份linux 文件内容 到 远端主机
    转 javascript 本地时间 和utc 节点 和 时间戳转换 的
    转 钢铁侠的云之舞~多租户,Docker,虚拟机 , 你怎么选?
    转 perl 的调试
    转 pt-query-digest 使用实例
  • 原文地址:https://www.cnblogs.com/dragonflyyi/p/3179502.html
Copyright © 2011-2022 走看看