使用sql*plus工具

1、查看当前的数据里名称-select name from v$database;
2、查看当前的登录的用用户-show user;
3、切换登录的用户-conn scott/tiger;
4、从DOS窗口中登录-sqlplus system/oracle(口令)@oracle(连接标示符)
5、从Dos窗口中登录-sqlplus scott/tiger@oracle(数据库名称) as sysdba(指定管理权限)
权限的简单的解析:
as:用来指定管理权限,权限的可选值用sysdba,sysoper,sysasm
关于权限的简单的介绍:
sysdba:具有sysoper权限的管理员可以启动和关闭数据库,执行联机和脱脂备份,归档当前重做日志文件,连接数据库。


sysoper:sysdba权限包含sysoper的所用权限,另外  还能够创建数据库,并且授权sysdba或者sysoper权限给其他数据库


用户。


sysam:sysasm权限是  oracle11g的新增特性,是asm实力所特用的,用来管理数据可存储。
6、在sqlplus中连接-conn sys/oracle as sysdba
7、使用disconn来断开连接
8、oracle的sql*plus是与oracle进行交互的客户端工具。


9、在sqlplus命令中-host 使用该命令可以从sql*plus环境中切换到操作系统环境,一边执行操作系统命令,使用exit命令


可以重新回到sql*plus状态。
10、清除屏幕内容-clear screen
11、show all-查看sql*plus中所用系统变量值信息
12、show sga-显示sga大小
sga的简单介绍:
SGA主要由数据高速缓冲区(Database Buffer Cache)、共享池(Shared Pool)、重做日志缓冲区(Redo Log Cache)、


大型池(Large Pool)、Java池(Java Pool)、流池(Streams Pool)和其他结构(如固定SGA、锁管理等)组成。


折叠重要特性


1、SGA的构成——数据和控制信息,我们下面会详细介绍。


2、SGA是共享的,即当有多个用户同时登录了这个实例,SGA中的信息可以被它们同时访问(当涉及到互斥的问题时,由


latch和sequence控制)。


3、一个SGA只服务于一个实例,也就是说,当一台机器上有多个实例运行时,每个实例都有一个自己的SGA尽管SGA来自于OS


的共享内存区,但实例之间不能相互访问对方的SGA区。


折叠主要包括


1.数据库高速缓冲(the data buffer cache),


2.重做日志缓冲(the redo log buffer)


3.共享池(the shared pool),包括库高速缓存(the Library cache)和数据字典缓存(the data dictionary cache)


以及其它各方面的信息。


1.数据高速缓冲区(Data Buffer Cache)


在数据高速缓冲区中存放着Oracle系统使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单


位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用户访问的数据。如果用户要查的数据不在数据高速缓


冲区时,Oracle自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:


1) 脏数据区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。


2) 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。


3) 保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用的区。


2.Redo Log Buffer Cache缓存对于数据块的所有修改。


主要用于恢复其中的每一项修改记录都被称为redo 条目。利用Redo条目的信息可以重做修改。


3. Shared Pool用于缓存被执行的SQL语句和被使用的数据定义。


它主要由两个内存结构构成:Library cache和Data dictionary cache


修改共享池的大小:ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;


Libray Cache缓存被执行的SQL和PL/SQL的相关信息,即存放SQL语句的文本,分析后的代码及执行计划。实现常用语句的共


享,使用LRU算法进行管理,由以下两个结构构成:Shared SQL area、Shared PL/SQL area;


Data Dictionary Cache缓存被使用的数据库定义,即存放有关表,列和其它对象定义及权限。它包括关于数据库文件、表、


索引、列、用户、权限以及其它数据库对象的信息。在语法分析阶段,Server Process访问数据字典中的信息以解析对象名


和对存取操作进行验证。数据字典信息缓存在内存中有助于缩短响应时间。
show release 显示数据库的版本
show errors查看详细的错误信息
show parameters查看系统初始化参数信息
13、在其他用户下访问其他的用户中表格:desc scott.emp;
14、使用sql*plus 语句快速编辑sql语句
15、如果在sql>后输入行号,将显示对应行的信息
16、将缓冲区中的sql语句表保存在文件scott_emp_query.sql中。若果该文件不存在,则可以指定create选项。
如下所示:save scott_emp_query.sql
文件将被创建保存在:G:\oracle10g\BIN
17、将scott_emp_query.sql文件的内容读入到缓冲区中,并且输出和显示这些内容,如下:
get scott_emp_query.sql
18、使用edit命令编辑缓冲区内容或文件内容
直接用edit打开afiedt.buf将需要执行的代码放进来,/或者run执行缓冲区的sql语句。
19、使用spool命令复制输出结果到文件
spool scott_emp_outcome.txt append
然后执行输入缓冲的语句,输出结果将保存到scott_emp_outcome.txt文件中。
执行之后“/”将会打印出执行的内容。
执行spool off命令,在该命令之后所操作的任何语句,将不再保存期输出结构。

spool off

两个默认生的文件在这:

使用sql*plus工具_第1张图片

20、oracle database 11g系统提供了两种类型的变量,即是临时变量和已定义的变量。
实例:
select empno,ename,mar,sal,deptno
from scott.emp
where empno >=&temp
输入temp的值:
21、特例:在select语句中,指定临时变量column_name,并且两次使用该变量执行该语句时,系统两次提示用户输入


column|_name的值,如下:


select &column_name,deptno
from scott.emp
where &column_name>=7850


输入 column_name的值:empno
原值 1:select &column_name,depno
新值 1:select empno,deptno
输入 column_name 的值:emptno
原值 3:where &colmn_name=>7850
新值 3:where empno>=7850
22、使用&&符号表示临时变量
在sql语句中,如果希望重新使用某个变量并且不希望重新提示输入值,那么可以使用&&符号来定义临时变量
select &&column_name,deptno
from scott.emp
where &&column_name>=7850
/
使用&&符号定义该变量,在执行select语句时,系统只提示一次输入变量的值。
使用&&符号替代&,可以避免为同一个变量提供两个不同的值而且使得系统为同一个变量值只提示一次信息。


set verify [on|off]:用来指定是否输出原值和新值信息。
set def[ine]:用于指定一个除字符&只玩的字符,作为定义变量的字符。


set define '@'
select empno,deptno from scott.emp
where empno=@temp
/
变量定义字符是可以设置的。


23、在脚本文件中使用临时变量:
脚本(script)是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。


脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时


,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的


过程,所以它比二进制程序执行效率要稍低一些。
24、在文件下创建一个.sql文件,执行这个文件:@ +文件的绝对路径
例如:
@ e:\temp\temp.sql
25、已定义的变量是指由明确定义的变量,该变量的值会一直保留被显示的删除、重定义或定义或退出sql*plus为止


已经定义的变量的作用:
在sql语句中,可以在使用变量之前对变量进行定义,然后在同一个sql语句中可以多次使用这个变量。定义这个变量,可以


使用define 或者 accept 命令;删除变量时,可以使用undefined命令。


oracle系统提供一个写定义变量,可以使用define命令查看系统的所有定义的变量。


例题:
使用define命令,定义一个变量temp,(define temp=7850 直接回车)define temp 查看这个变量,然后在select语句的


where子句使用该变量执行语句时,系统不再提示用户输入变量的值,如下:


select empno ,deptno from scott.emp
where empno>=&temp
/
临时变量不再提示值得输入。


26、使用accept命令可以定义一个变量,并且定制一个用户提示,用于提示用户输入指定变量的数据。在定义变量时,可以


明确指定该变量是number还是date等数据类型,为了安全行的原因,还可以将用户输入的信息隐藏起来。
举例:
使用accept命令定义一个temp变量,并且指定相应的选项设置,然后在select语句中使用变量temp
undefine temp


select empno,deptno from scott.emp
where empno=&temp


accept temp number 9999 prompt '你好,输入一个empno值:'hide



关于日期:

SQL> accept rq date format yyyy-mm-dd prompt '请输入rq的值:';
请输入rq的值:1980-12-01
SQL> select empno,ename,hiredate
  2  from emp
  3  where hiredate>=&rq;
原值    3: where hiredate>=&rq
新值    3: where hiredate>=1980-12-01
where hiredate>=1980-12-01
              *
第 3 行出现错误: 
ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER 
SQL> accept rq date format yyyy-mm-dd prompt '请输入rq的值:';
请输入rq的值:'1980-12-01'
SP2-0685: 日期"'1980-12-01'"无效或格式不匹配"yyyy-mm-dd"
请输入rq的值:1980-12-01
SQL> select empno,ename,hiredate
  2  from emp
  3  where hiredate>='&rq';
原值    3: where hiredate>='&rq'
新值    3: where hiredate>='1980-12-01'
where hiredate>='1980-12-01'
                *
第 3 行出现错误: 
ORA-01861: 文字与格式字符串不匹配 




SQL> alter session set nls_date_format='yyyy-mm-dd';


会话已更改。


SQL> select empno,ename,hiredate
  2  from emp
  3  where hiredate>='&rq';
原值    3: where hiredate>='&rq'
新值    3: where hiredate>='1980-12-01'


     EMPNO ENAME      HIREDATE                                                  
---------- ---------- ----------                                                
      7369 SMITH      1980-12-17                                                
      7499 ALLEN      1981-02-20                                                
      7521 WARD       1981-02-22                                                
      7566 JONES      1981-04-02                                                
      7654 MARTIN     1981-09-28                                                
      7698 BLAKE      1981-05-01                                                
      7782 CLARK      1981-06-09                                                
      7788 SCOTT      1987-04-19                                                
      7839 KING       1981-11-17                                                
      7844 TURNER     1981-09-08                                                
      7876 ADAMS      1987-05-23                                                


     EMPNO ENAME      HIREDATE                                                  
---------- ---------- ----------                                                
      7900 JAMES      1981-12-03                                                
      7902 FORD       1981-12-03                                                
      7934 MILLER     1982-01-23                                                


已选择14行。

1、定义日期变和shiyong日期变量
SQL> accept rq date format yyyy-mm-dd prompt '请输入rq的值:';
请输入rq的值:1980-12-01
SQL> select empno,ename,hiredate
  2  from emp
  3  where hiredate>=&rq;
原值    3: where hiredate>=&rq
新值    3: where hiredate>=1980-12-01
from emp
     *
第 2 行出现错误:
ORA-00942: 表或视图不存在
正确的做法:
alter session set nls_date_format='yyyy-mm-dd';

select empno,ename,hiredate
from scott.emp
where hiredate>='&rq'
/
2、设置一行显示多少字符:set linesize n
如果没有效果,可以在黑框中设置属性
3、null命令的使用:col comm(字段名称) null '没有奖金'
4、设置由text字符串指定的列标题:col empno heading '员工编号'
5、设置列容纳的字符:为[var]char类型的列内容设置宽度,如果


我的第一报表:

TTITLE LEFT '日期:'_date center'执行[scott.emp(职工表),sccott.dept(部门表)]'
btitle CENTER '-----谢谢使用该报表!----'skip 2 left '页:'format 999 sql.pno
set echo off
set verify off
set pagesize 22
set linesize 120
clear columns
col empno heading '员工编号' format 9999
col ename heading '员工姓名' format a10
col dname heading '部门姓名' format a10
col mgr heading '上级编号' format 9999
col hiredate heading '受雇日期' justify center
col sal heading '员工工资' format $999,999.99
select empno,dname,ename,dname,mgr,hiredate,sal 
from scott.emp,scott.dept
where scott.emp.deptno=scott.dept.deptno;
clear columns
ttitle off
btitle off

将这个文件放在.sql文件中.

用@ 路径执行这个脚本文件

















































 

你可能感兴趣的:(数据库)