zoukankan      html  css  js  c++  java
  • Oracle SQL*plus常用的命令和函数

    Oracle中常用的命令和函数,做个整理,以备以后用到,方便查阅。

    常用命令:

    连接sqlplus
    命令行下运行cmd进入,如以sys模式登陆,命令如下:
    (1).sqlplus "sys/zhb126 as sysdba"

    (2).sqlplus/nolog  connect sys/zhb126 as sysdba

    (3).sqlplus scott/tiger

    启动数据库实例

    startup --启动数据库的同时启动控制文件、数据文件

    startup mount --启动数据库的同时启动控制文件、不启动数据文件

    startup nomount --仅启动数据库实例,用于控制文件丢失情况,此时控制文件无法启动
    关闭数据库实例

    shutdown --正常关闭(等待所有用户断开连接后才能关闭)

    shutdown immediate--建议使用(迫使用户执行当前SQL后立即断开连接)

    shutdown transactional--(迫使在当前用户执行完后立即断开连接)

    shutdown abort--强制关闭(类db2的db2 stop force)

    查看日志归档方式--用startup mount启动数据库

    archive log list

    ALTER DATABASE archivelog

    ALTER DATABASE OPEN 
    查看sqlplus支持的命令

    help INDEX
    解除用户锁

    以安装oracle时第一步设置的用户口令登陆(如:sqlplus "sys/zhb126 as sysdba")后执行

    alter user scott account unlock;

    然后执行sqlplus scott/tiger,此时会要求你修改scott的新口令。
    设置命令行支持空格

    set sqlblanklines on
    变量替代--变量替换,这个过程只安排一个执行计划,可提高执行效率

    SQL> select * from dept where deptno = &t;

    输入 t 的值:  10

    原值  1: select * from dept where deptno = &t

    新值  1: select * from dept where deptno = 10
    查看缓冲器执行过的命令 (list/l)

    SQL> l

      1* select * from dept where deptno = &t

    SQL> l1

      1* select * from dept where deptno = &t
    缓冲区文件的保持、执行
    SQL> save d:\test.sql   --保存缓冲区文件到指定文件中

    已创建 file d:\test.sql

    SQL> @d:\test.sql    --执行保存文件的SQL
    查看表结构(describe/desc)
    SQL> desc dept
    保存查询输出结果

    SQL> spool D:\spool.txt    --开启spool并指定保存路径

    SQL> / --执行缓冲区的sql语句

    SQL> spool off --关闭spool

    SQL> edit d:\spool.txt --打开文件查看保存内容

    常用函数:
    sysdate为系统日期 dual为虚表
    日期函数[重点掌握前四个日期函数]
    1.add_months[返回日期加(减)指定月份后(前)的日期]
    select sysdate S1,add_months(sysdate,10) S2,
    add_months(sysdate,5) S3 from dual;
    2.last_day [返回该月最后一天的日期]
    select last_day(sysdate) from dual;
    3.months_between[返回日期之间的月份数]
    select sysdate S1, months_between('1-4月-04',sysdate) S2,
    months_between('1-4月-04','1-2月-04') S3 from dual
    4.next_day(d,day): 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日
    select sysdate S1,next_day(sysdate,1) S2,
    next_day(sysdate,'星期日') S3 FROM DUAL
    5.round[舍入到最接近的日期](day:舍入到最接近的星期日)
    select sysdate S1,
    round(sysdate) S2 ,
    round(sysdate,'year') YEAR,
    round(sysdate,'month') MONTH ,
    round(sysdate,'day') DAY from dual
    6.trunc[截断到最接近的日期]
    select sysdate S1,
    trunc(sysdate) S2,
    trunc(sysdate,'year') YEAR,
    trunc(sysdate,'month') MONTH ,
    trunc(sysdate,'day') DAY from dual
    7.返回日期列表中最晚日期
    select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

    字符函数(可用于字面字符或数据库列)
    1.字符串截取
    select substr('abcdef',1,3) from dual
    2.查找子串位置
    select instr('abcfdgfdhd','fd') from dual
    3.字符串连接
    select 'HELLO'||'hello world' from dual;
    4. 1)去掉字符串中的空格
    select ltrim(' abc') s1,
    rtrim('zhang ') s2,
    trim(' zhang ') s3 from dual
    2)去掉前导和后缀
    select trim(leading 9 from 9998767999) s1,
    trim(trailing 9 from 9998767999) s2,
    trim(9 from 9998767999) s3 from dual;
    5.返回字符串首字母的Ascii值
    select ascii('a') from dual
    6.返回ascii值对应的字母
    select chr(97) from dual
    7.计算字符串长度
    select length('abcdef') from dual
    8.initcap(首字母变大写) ,lower(变小写),upper(变大写)
    select lower('ABC') s1,
    upper('def') s2,
    initcap('efg') s3 from dual;
    9.Replace
    select replace('abc','b','xy') from dual;
    10.translate
    select translate('abc','b','xx') from dual; -- x是1位
    11.lpad [左添充] rpad [右填充](用于控制输出格式)
    select lpad('func',15,'=') s1, rpad('func',15,'-') s2 from dual;
    select lpad(dname,14,'=') from dept;
    12.decode[实现if ..then 逻辑]
    select deptno,decode(deptno,10,'1',20,'2',30,'3','其他') from dept;

    数字函数
    1.取整函数(ceil 向上取整,floor 向下取整)
    select ceil(66.6) N1,floor(66.6) N2 from dual;
    2. 取幂(power) 和 求平方根(sqrt)
    select power(3,2) N1,sqrt(9) N2 from dual;
    3.求余
    select mod(9,5) from dual;
    4.返回固定小数位数 (round:四舍五入,trunc:直接截断)
    select round(66.667,2) N1,trunc(66.667,2) N2 from dual;
    5.返回值的符号(正数返回为1,负数为-1)
    select sign(-32),sign(293) from dual;

    转换函数
    1.to_char()[将日期和数字类型转换成字符类型]
    1) select to_char(sysdate) s1,
    to_char(sysdate,'yyyy-mm-dd') s2,
    to_char(sysdate,'yyyy') s3,
    to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,
    to_char(sysdate, 'hh24:mi:ss') s5,
    to_char(sysdate,'DAY') s6 from dual;
    2) select sal,to_char(sal,'$99999') n1,to_char(sal,'$99,999') n2 from emp
    2. to_date()[将字符类型转换为日期类型]
    insert into emp(empno,hiredate) values(8000,to_date('2004-10-10','yyyy-mm-dd'));
    3. to_number() 转换为数字类型
    select to_number(to_char(sysdate,'hh12')) from dual; //以数字显示的小时数

    其他函数
    user:
    返回登录的用户名称
    select user from dual;
    vsize:
    返回表达式所需的字节数
    select vsize('HELLO') from dual;
    nvl(ex1,ex2):  
    ex1值为空则返回ex2,否则返回该值本身ex1(常用)
    例:如果雇员没有佣金,将显示0,否则显示佣金
    select comm,nvl(comm,0) from emp;
    nullif(ex1,ex2):
    值相等返空,否则返回第一个值
    例:如果工资和佣金相等,则显示空,否则显示工资
    select nullif(sal,comm),sal,comm from emp;
    coalesce:  
    返回列表中第一个非空表达式
    select comm,sal,coalesce(comm,sal,sal*10) from emp;
    nvl2(ex1,ex2,ex3) :
    如果ex1不为空,显示ex2,否则显示ex3
    如:查看有佣金的雇员姓名以及他们的佣金
    select nvl2(comm,ename,') as HaveCommName,comm from emp;

    分组函数
    max min avg count sum
    1.整个结果集是一个组
    1) 求部门30 的最高工资,最低工资,平均工资,总人数,有工作的人数,工种数量及工资总和
    select max(ename),max(sal),
    min(ename),min(sal),
    avg(sal),
    count(*) ,count(job),count(distinct(job)) ,
    sum(sal) from emp where deptno=30;
    2. 带group by 和 having 的分组
    1)按部门分组求最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和
    select deptno, max(ename),max(sal),
    min(ename),min(sal),
    avg(sal),
    count(*) ,count(job),count(distinct(job)) ,
    sum(sal) from emp group by deptno;
    2)部门30的最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和
    select deptno, max(ename),max(sal),
    min(ename),min(sal),
    avg(sal),
    count(*) ,count(job),count(distinct(job)) ,
    sum(sal) from emp group by deptno having deptno=30;
    3.stddev 返回一组值的标准偏差
    select deptno,stddev(sal) from emp group by deptno;
    variance 返回一组值的方差差
    select deptno,variance(sal) from emp group by deptno;
    4. 带有rollup和cube操作符的Group By
    rollup 按分组的第一个列进行统计和最后的小计
    cube 按分组的所有列的进行统计和最后的小计
    select deptno,job ,sum(sal) from emp group by deptno,job;
    select deptno,job ,sum(sal) from emp group by rollup(deptno,job);
    cube 产生组内所有列的统计和最后的小计
    select deptno,job ,sum(sal) from emp group by cube(deptno,job);


     

  • 相关阅读:
    HTML元素解释
    Java命名规范
    HDU 1058 Humble Numbers(DP,数)
    HDU 2845 Beans(DP,最大不连续和)
    HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
    HDU 2870 Largest Submatrix(DP)
    HDU 1421 搬寝室(DP)
    HDU 2844 Coins (组合背包)
    HDU 2577 How to Type(模拟)
    HDU 2159 FATE(二维完全背包)
  • 原文地址:https://www.cnblogs.com/gaoweipeng/p/1578194.html
Copyright © 2011-2022 走看看