• SQLPlus


    3.3、SQLPlus

    对于Oracle的前台工具而言,个人有一些看法:

    Oracle 9i:OEM(Oracle的企业管理器),sqlplusw.exe(采用命令行窗口的方式显示,这种方式可以自己控制),sqlplus.exe(是sqlplusw的命令行版)

    Oracle 10g:sqlplusw.exe,sqlplus.exe,EM(在线的企业管理器)

    Oracle 11g:sqlplus.exe,SQL Developer

    Oracle 12c:sqlplus.exe,SQL Developer(比较成熟)

    对于sqlplus而言,是从最早一直延续到今天的习惯,所以,以后的开发之中对于这个工具的一些命令需要清楚。

    2.SQLPlus简介

    SQLPlus是Oracle数据库提供的一个专门用于数据库管理的交互式工具,使用SQLPlus通过命令行的方式管理Oracle数据库的所有任务,也可以通过SQLPlus执行SQL语句的操作。

    如果想讲解sqlplus命令,那么首先还必须解决一个新的问题,数据问题。

    在Oracle 12c之中由于存在了CDB和PDB概念,所以所谓的测试数据默认是找不到的。所以首先针对于数据做一个恢复。在Oracle安装文件下找到scott.sql脚本,然后对它修改。所以为了方便,提供了c##scott.sql文件(由于CDB和PDB,所以用户名前必须加c##)。虽然名称是c##scott,但是本质还是scott。

    如果想进行数据的配置,执行的顺序如下:

    1.首先打开sqlplus.exe:在cmd里输入sqlplus /nolog(直接在cmd里输入sqlplus,是要输入用户名和密码的)

    2.执行c##scott.sql文件

    下面是c##scott.sql文件内容:

    -- 使用超级管理员登录
    CONN sys/change_on_install AS SYSDBA ;
    
    -- 创建c##scott用户  (identified 被识别)
    CREATE USER c##scott IDENTIFIED BY tiger ;    
    
    -- 为用户授权  (grant 授予,允许  container 集装箱,容器)
    GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO c##scott CONTAINER=ALL ;
    
    -- 设置用户使用的表空间  (alter 更改)
    ALTER USER c##scott DEFAULT TABLESPACE USERS;
    ALTER USER c##scott TEMPORARY TABLESPACE TEMP;
    
    -- 使用c##scott用户登录
    CONNECT c##scott/tiger
    
    -- 删除数据表  (purge 净化,清洗  salgrade 工资等级表)
    DROP TABLE emp  PURGE ;
    DROP TABLE dept PURGE ;
    DROP TABLE bonus PURGE ;
    DROP TABLE salgrade PURGE ;
    
    -- 创建数据表  (constraint 约束,强制  primary 主要的,初级的  bonus 奖金)
    CREATE TABLE dept (
        deptno        NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
        dname        VARCHAR2(14) ,
        loc        VARCHAR2(13) ) ;
    CREATE TABLE emp (
        empno        NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
        ename        VARCHAR2(10),
        job        VARCHAR2(9),
        mgr        NUMBER(4),
        hiredate    DATE,
        sal        NUMBER(7,2),
        comm        NUMBER(7,2),
        deptno        NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT );
    CREATE TABLE bonus (
        enamE        VARCHAR2(10)    ,
        job        VARCHAR2(9)  ,
        sal        NUMBER,
        comm        NUMBER ) ;
    CREATE TABLE salgrade ( 
        grade        NUMBER,
        losal        NUMBER,
        hisal        NUMBER );
    
    -- 插入测试数据 —— dept
    INSERT INTO dept VALUES    (10,'ACCOUNTING','NEW YORK');
    INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
    INSERT INTO dept VALUES    (30,'SALES','CHICAGO');
    INSERT INTO dept VALUES    (40,'OPERATIONS','BOSTON');
    -- 插入测试数据 —— emp
    INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
    INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
    INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
    INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
    INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
    INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
    INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
    INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('19-04-1987','dd-mm-yyyy')-85,3000,NULL,20);
    INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
    INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
    INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('23-05-1987','dd-mm-yyyy')-51,1100,NULL,20);
    INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
    INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
    INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
    -- 插入测试数据 —— salgrade
    INSERT INTO salgrade VALUES (1,700,1200);
    INSERT INTO salgrade VALUES (2,1201,1400);
    INSERT INTO salgrade VALUES (3,1401,2000);
    INSERT INTO salgrade VALUES (4,2001,3000);
    INSERT INTO salgrade VALUES (5,3001,9999);
    
    -- 事务提交
    COMMIT;

    3.SQLPlus常用命令

    • 设置每行显示的记录长度:SET LINESIZE 300;
    • 设置每页显示的记录长度:SET PAGESIZE 30;
    • 使用ed命令调用本机记事本程序
    • 用户连接数据库:CONN 用户名/密码 [AS SYSDBA];
    • 取的当前用户的全部数据对象:SELECT * FROM tab;
    • 查看表结构:DESC 表名称;
    • 使用本机的操作系统命令:HOST 命令 ...;

    1.格式化命令:

    SELECT * FROM emp  # 查询emp表中的全部数据信息

    在结果中可以看到,数据显示出现折行的问题。数据的分页也出现了问题。如果要想让数据变的好看一些,首先解决的是屏幕的宽度问题(在命令行的属性中设置),然后使用下面的两个格式化命令。

    解决折行问题,设置每行显示300个字符:SET LINESIZE 300;

    解决分页问题,设置每页显示数据长度30:SET PAGESIZE 30;

    2.在sqlplus中,为了方便编写很长的SQL语句,专门提供了调用本机记事本的命令。可以利用ed命令完成操作。(比如:执行ed.mldn后,因为没有mldn.sql文件,会询问是否创建该文件),选择是,然后打开记事本,在文本之中直接编写之前的数据的查询命令,保存退出,随后可以使用“@”标记,执行程序,输入“@mldn”。 但是实际操作中是在记事本上编写完成后,然后复制粘贴到Oracle中。

    3.连接操作

    在Oracle中有许多的用户,这些用户彼此之间是可以相互切换的。而切换的基本语法:

    CONN 用户名密码 [AS SYSDBA]

    如果使用的是sys用户,那么要加上AS SYSDBA的选项。

    范例:连接数据库,使用sys用户登录

    CONN sys/change_on_install AS SYSDBA;

    连接之后,可以输入“SHOW USER”命令来查看当前用户。

    如果说通过sys继续查询c##scott用户中的emp表,那么肯定无法查询,这个时候就必须在表前加上用户名,即:c##scott.emp

    SELECT * FROM c##scott.emp;

    用户名有时候可以被简单的称为模式名称,所以所有的表都具备模式名称的。

    即:模式名.表名称。

    如果现在要想使用一个普通的用户登录,那么可以在输入命令的时候不编写SYSDBA了。

    CONN c##scott/tiger;

    范例:一个用户下一定会存在多张数据表,查看所有的表。

    SELECT * FROM tab;

    从中可以看出c##scott用户中有奖金表(bonus),部门表(dept),职员表(emp),工资等级表(salgrade)。

    COL tname FOR A20;    //COL表示局部格式化
    COL tabtype FOR A20;
    COL clusterid FOR A20;
    SELECT * FROM tab;

    范例:查看emp表结构

    DESC emp

    在sqlplus之中除了执行自己的命令之外,也可以调用本机操作系统的命令,那么只需要在相关命令前加上HOST指令即可。

    HOST dir

    执行这个命令会将用户目录下的所有结构列出来。

    HOST copy d:mldn.jpg d:hello.jpg

    该命令表示将D盘中的mldn.jpg复制到D盘中的hello.jpg。

    3.4、关于原始问题(不重要)

    现在的Oracle12c中,虽然选择了要进行样本数据的创建,不过遗憾的是,发现根本就不会出现scott、sh用户。

    scott和sh用户真实存在,也在数据库中,可是默认情况下用户所有操作的数据都保存在CDB,而且在这里的用户名称必须以c##开头,例如:c##scott。

    第一步:需要使用sys登录

    CONN sys/change_on_install AS SYSDBA;

    第二步:查看现在的容器名称

    SHOW con_name;

    可以清楚的发现,现在返回的是一个“CDB$ROOT”,表示的是一个CDB容器。

    第三步:改变容器为PDB

    ALTER SESSION SET CONTAINER=pdbmldn;

    第四步:如果未打开数据库,则先打开

    ALTER DATABASE pdbmldn OPEN

    如果现在不是在PDB容器之中,那么还需要在命令上增加一个PLUGGABLE,即:

    ALTER PLUGGABLE DATABASE pdbmldn OPEN

    第五步:查看用户

    SELECT username FROM dba_users WHERE usename='SCOTT' OR usename='SH';

    第六步:切换回CDB

    如果想切换回CDB,只需要重新登陆,或者直接输入切换命令。

    ALTER SESSION SET CONTAINER=cdb$root;

    3.5、SQL Developer配置

    在Oracle的学习中,SQL Developer应用算是现在的重点。这个工具是在Oracle11g后开始提供的。

    这个工具依赖Java环境,所以需要进行Java相关命令的配置,路径:D:apporacleuserproduct12.1.0dbhome_1jdkin

    而后,首先询问用户是否需要做文件关联,建议别作。

    如果要想使用此工具,那么就必须建立新的连接。为了后续学习方便,建议此处建立两个连接:普通用户(c##scott/tiger)、管理员(sys/change_on_install)。 

    可以发现在SQL Developer之中具备了格式化的显示功能,所以一些sqlplus中的格式化命令意义就不大了。

    3.6、c##scott用户表

    在以后讲解的数据库知识中,c##scott用户是主要的操作用户,那么在这个用户之中所存在的几张数据表需要清楚(背)。

    部门表:dept

    No. 字段名称 类型 描述
    1 DEPTNO NUMBER(2) 表示的是部门的编号,部门的编号由两位数字组成
    2 DNAME VARCHAR2(14) 部门名称,最多是14个字符长度
    3 LOC VARCHAR2(13) 部门位置,最多是13个字符长度
    deptno dname loc
    10 ACCOUNTING NEW YORK
    20 RESEARCH DALLAS
    30 SALES CHICAGO
    40 OPERATIONS BOSTON

    雇员表:emp

    No. 字段名称 类型 描述
    1 EMPNO NUMBER(4) 雇员的编号,由4位数字组成
    2 ENAME VARCHAR2(10) 雇员姓名,由10个字符组成
    3 JOB VARCHAR2(9) 职位(工作),由9个字符组成
    4 MGR NUMBER(4) 一个雇员对应的领导的标号,领导也是雇员
    5 HIREDATE DATE 表示的是雇用日期,存放的是日期型数据
    6 SAL NUMBER(7, 2) 基本工资,由2位小数,和5位整数组成,一共7位
    7 COMM NUMBER(7, 2) 佣金(奖金),销售人员可以领取
    8 DEPTNO NUMBER(2) 雇员所属的部门编号,与dept表对应
    empno ename job mgr hiredate sal comm deptno
    7369 SMITH CLERK 7902 1980-12-17 800   20
    7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
    7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
    7566 JONES MANAGER 7839 1981-04-20 2975   20
    7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
    7689 BLAKE MANAGER 7839 1981-05-01 2850   30
    7782 CLARK MANAGER 7839 1987-06-09 2450   10
    7788 SCOTT ANALYST 7566 1981-04-19 3000   20
    7839 KING PRESIDENT   1981-11-17 5000   10
    7844 TURNER SALESMAN 7689 1981-09-08 1500 0 30
    7876 ADAMS CLERK 7788 1987-05-23 1100   20
    7900 JAMES CLERK 7698 1981-12-03 950   30
    7902 FORD ANALYST 7566 1981-12-03 3000   20
    7934 MILLER CLERK 7782 1982-01-23 1300   10

    工资等级表:salgrade

    No. 字段名称 类型 描述
    1 GRADE NUMBER 工资的等级编号
    2 LOSAL NUMBER 此等级的最低工资
    3 HISAL NUMBER 此等级的最高工资
    grade losal hisal
    1 700 1200
    2 1201 1400
    3 1401 2000
    4 2001 3000
    5 3001 9999

    工资补贴条:

    No. 字段名称 类型 描述
    1 ENAME VARCHAR2(10) 雇员姓名
    2 JOB VARCHAR2(9) 工作
    3 SAL NUMBER 基本工资
    4 COMM NUMBER 佣金

    在给出的四张数据表之中,只有工资表是没有数据的。

    小结:

    Oracle数据库中的四个主要用户:

    超级管理员:sys/change_on_install;

    普通管理员:system/manager;

    普通用户:scott/tiger(Oracle 12c之后改为c##scott)

    海量数据用户:sh/sh;

    Oracle安装之中最重要的两个服务是监听和数据库实例服务。

  • 相关阅读:
    【转】BFT类共识协议概览与分析实测
    谈谈架构设计的八条原则
    Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!
    Python如何实现单步调试
    Python如何实现单步调试
    Flash调用Alchemy编译的代码时出现Error #1506的解决
    Flash调用Alchemy编译的代码时出现Error #1506的解决
    Flash调用Alchemy编译的代码时出现Error #1506的解决
    Flash调用Alchemy编译的代码时出现Error #1506的解决
    showModalDialog使用讲解
  • 原文地址:https://www.cnblogs.com/keye/p/8052114.html
Copyright © 2020-2023  润新知