zoukankan      html  css  js  c++  java
  • Oracle序列 与 基本函数介绍

    Oracle序列 与 基本函数介绍

    常用词汇

    expire
    [ɪkˈspaɪə(r)]
    v.
    失效,终止;到期;

    数据字典(data dictionary:dd)

    描述逻辑存储结构和物理存储结构的数据表,还包括描述其他数据对象信息的表:

    数据字典名称 说明
    dba_tablespaces 关于表空间的信息
    dba_ts_quotas 所有用户表空间限额
    dba_free_space 所有表空间中的自由分区
    dba_segments 描述数据库中所有段的存储空间
    dba_extents 数据库中所有分区的信息
    dba_tables 数据库中所有数据表的描述
    dba_tab_columns 所有表、视图以及簇的列
    dba_views 数据库中所有视图的信息
    dba_synonyms 关于同义词的信息
    dba_sequences 所有用户序列信息
    dba_constraints 所有用户表的约束信息
    dba_indexs 数据表中所有索引的描述
    dba_ind_columns 所有表及簇上压缩索引的列
    dba_triggers 所有用户的触发器信息
    dba_source 所有用户存储过程信息
    dba_data_files 查询关于数据库文件的信息
    dba_tab_grants/privs 查询关于对象授权的信息
    dba_objects 数据库所有对象
    dba_users 关于数据库中所有用户的信息
    -- 清空屏幕
    clear
    clear screen
    
    create user tester identified by abc123;
    grant connect,resource to tester;
    conn tester/abc123@mydog
    -- 查询数据库中所有用户的信息
    Select * from user_tables;
    

    oracle序列技术理解

    sequence(序列,是一个对象,和表是平级的,专门用来做自增)

    在高级数据中,自增是一个独立的部件,而不是字段的辅助属性

    idenitity,auto_increment

    oracle的自增跟普通的数据库的自增不一样,它是通过对象来自增的,这个对象叫序列

    oracle数据库有一种表叫user_sequences,专门保存了一种专门用来做自增的部件

    查看用户是否有序列存在

    select count(*) from user_sequences;
    

    在oracle中,如果不from某张表,是无法进行任何操作的
    为了凑足语法,oracle专门准备一张表(dual),一个字段一行记录

    -- sysdate是一个日期函数
    select sysdate from dual;
    
    conn tester/abc123@mydog
    
    create sequence seq_stu_no;
    select count(*) from user_sequences;
    
    -- 需要先查询nextval,不然就没有当前值
    select seq_stu_no.nextval from dual;
    select seq_stu_no.currval from dual;
    
    create table tbl_student(
          stu_no int primary key,
          stu_name varchar2(30) not null
    );
    
    -- oracle的自增是一个对象,这个对象是序列
    insert into tbl_student values(seq_stu_no.nextval,'mary');
    insert into tbl_student values(seq_stu_no.nextval,'davud');
    insert into tbl_student values(seq_stu_no.nextval,'jenny');
    insert into tbl_student values(seq_stu_no.nextval,'mike');
    
    -- 创建用户tester序列
    create sequence tester.seq_xyz;
    
    select * from user_sequences;
    create sequence seq_desk_no
        minvalue 1000
        maxvalue 2000
        increment by 100;
        
    select * from user_sequences;
    select seq_desk_no.nextval from dual;
    select seq_desk_no.currval from dual;
    alter sequence seq_desk_no cache 10;
    alter sequence seq_desk_no increment by 2;
    select seq_desk_no.nextval from dual;
    select seq_desk_no.currval from dual;
    drop sequence seq_desk_no;
    

    账号管理

    用户管理

    select * from dba_users;
    select * from dba_users order by user_id desc;
    
    alter user hr identified by abc123;
    conn hr/abc123@mydog
    -- 因为账户被锁定,所以无法登录
    
    -- 解锁账户
    alter user hr account unlock;
    
    conn hr/abc123@mydog
    
    conn sys/manager@mydog as sysdba
    
    alter user hr account lock;
    -- 锁定离职员工账户
    
    conn sys/manager@mydog as sysdba
    -- password expire:用来设置用户口令过期,失效,强制用户登录数据库时候必须修改口令
    create user tester2 identified by abc123 password expire;
    grant connect,resource to tester2;
    select * from dba_users;
    
    conn tester2/abc123@mydog
    -- 然后需要修改密码,验证密码,进入tester2账户
    
    conn scott/tiger@mydog
    select table_name from user_tables;
    select * from emp;
    -- 描述表的结构
    desc emp;
    

    基本函数介绍及应用

    单行函数(字符函数)

    conn scott/tiger@mydog
    -- 小写字符转大写
    select upper('smith') from dual;
    -- 大写字符转小写
    select lower('TOM') from dual;
    -- 取整函数,四舍五入
    select round(4.5) from dual;
    
    -- emp是scott用户的专属表
    select * from emp where DEPTNO<>'10'; -- 会排除掉DEPTNO所有值是10的行数据
    
    select (sysdate-hiredate)/365 from emp;
    select round(sysdate-hiredate)/365 from emp;
    select round((sysdate-hiredate)/365) work_years from emp;
    select empno,ename,round((sysdate-hiredate)/365) work_years from emp;
    
    -- 获取两个时间之间的月份
    select months_between(sysdate,hiredate) months from emp;
    
    -- 时间转字符串,只转年份
    select to_char(hiredate,'yyyy') from emp;
    select to_char(hiredate,'yyyy-mm-dd') from emp;
    
    select * from emp;
    select sal+comm from emp;
    
    -- 如果comm列中有空值,则用0来代替
    select empno,ename,sal,nvl(comm,0) from emp;
    
    -- decode形成if--else语句
    select empno,ename,sal,nvl(comm,0),deptno,
    decode(deptno,
        10,'总部',                                         		
        20,'销售部',
        30,'研发部',
        '---') dept from emp;
                
    select empno,ename,sal,nvl(comm,0),deptno,
    case
    	when deptno = 10 then '总部'
    	when deptno = 20 then '销售部'
    	when deptno = 30 then '研发部'
    else
    	'----'
    end
    as deptinfo
    from emp;
    

    海韵听心

    PL/SQL Developer中文字段显示乱码

    解决方法

    原因:因为数据库的编号格式和pl /sql developer的编码格式不统一造成的。

    解决步骤

    1、查看oracle数据库字符集:

    sql语句:

    select userenv('language') from dual;
    

    结果集:

    AMERICAN_AMERICA.ZHS16GBK
    

    2、新建环境变量

    我的电脑(右键-属性) - 高级系统设置 - 高级 - 环境变量 - 系统变量 - 新建

    变量名:NLS_LANG

    变量值:与oracle数据库字符集一致

    3、重启pl/sql developer

  • 相关阅读:
    .bat文件打开指定网页,并运行jar包
    jar包制作一个可执行文件
    如何让局域网其他电脑通过IP直接访问自己电脑的网站
    Sypder 安装和使用
    tomcat服务器输入localhost可以访问,ip无法访问解决办法
    【转载】高性能网站建设
    网站优化
    JavaWeb 项目开发中的技术总结
    反射工具类——ReflectUtils
    Ajax 的缺点
  • 原文地址:https://www.cnblogs.com/mumuyinxin/p/10732782.html
Copyright © 2011-2022 走看看