1.回顾
前篇整理了一些PL/SQL的相关概念,对PL/SQL这一结构性编程语言有了基本的了解,本篇开始学习一些SQLPLUS的常用基本命令,为后续的PL/SQL编程做准备。
前文链接:
Oracle PL/SQL自学(一):初识PL/SQL
2.常用命令
2.1 DESC[RIBE]命令
功能:查询表结构;
示例:
SQL> DESC emp
2.2 SET LINE[SIZE] n 和SET PAGESIZE n命令
功能:设置显示屏的显示输出宽度/行数,默认值分别为80/14;
示例:
SQL> SET LINE 100
SQL> SET PAGESIZE 30
2.3 L命令和n text命令
功能:L 显示缓存区内容;n text 使用text替代第n行的内容;
示例:
SQL> L
1 SELECT JOB
2* FROM emp
SQL> 1 SELECT SAL
SQL> L
1 SELECT SAL
2* FROM emp
2.4 “/”命令
功能:执行缓存区语句;
示例:
SQL> SELECT * FROM emp
/**
emp表内容
**/
SQL> /
/**
emp表内容
**/
2.5 n命令和A[PPEND]命令
功能:n 设置当前行;A[PPEND] text 在当前行后追加text;
示例:
SQL> L
1 SELECT JOB
2* FROM emp
SQL> 1---------------------------------------设置当前行1
SQL> L
1* SELECT JOB
2 FROM emp
SQL> A ,SAL,ENAME----------------------------在行1后追加内容 ,SAL,ENAME
SQL> L
1* SELECT JOB,SAL,ENAME
2 FROM emp
2.6 DEL 命令
功能:删除行;
示例:
SQL> l
1 SELECT job,sal
2 FROM emp
3 WHERE sal>2800
4* ORDER BY job,sal DESC
SQL> DEL 4
SQL> L
1 SELECT job,sal
2 FROM emp
3* WHERE sal>2800
2.7 C[HANGE] 命令
功能:使用新的正文替代原文;
示例:
SQL> L
1 SELECT job,sal
2 FROM emp
3* WHERE sal>2800
SQL> 1
1* SELECT job,sal
SQL> C /job/ename
1* SELECT ename,sal
SQL> l
1 SELECT ename,sal
2 FROM emp
3* WHERE sal>2800
2.8 SAVE 命令
功能:将缓存区的语句存入脚本文件;
示例:
SQL> SAVE G:\Oracle\sql\test
已创建 file G:\Oracle\sql\test.sql
2.9 GET 命令
功能:将指定脚本文件的内容装入缓冲区;
示例:
SQL> l
1 select job,ename
2 FROM emp
3* WHERE sal>2800
SQL> GET G:\Oracle\sql\test
1 SELECT ename,sal
2 FROM emp
3* WHERE sal>2800
SQL> l
1 SELECT ename,sal
2 FROM emp
3* WHERE sal>2800
SQL>
2.10 @ 命令
功能:直接运行脚本;
示例:
SQL> @G:\Oracle\sql\test
ENAME SAL
---------- ----------
JONES 2975
BLAKE 2850
SCOTT 3000
KING 5000
FORD 3000
SQL>
2.11 SPOOL 命令
功能:导出显示内容;
示例:
SQL> SPOOL G:\Oracle\sql\info-----------------------------开始记录
SQL> SPOOL OFF--------------------------------------------结束记录
2.12 HELP xx 命令
功能:获取如何使用命令xx的信息,help index可列出所有命令;
2.13 show all 命令
功能:查询所有的参数设置;
3.利用AUTOTRACE追踪SQL语句
SQL*PLUS本身就内置了追踪SQL语句的功能,可以通过设置autotrace参数来开关这一功能。
SQL> show autotrace
autorace OFF
SQL> set autotrace ON
SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色
SP2-0611: 启用 STATISTICS 报告时出错
之所以出现这个问题是因为PLUSTRACE角色没有授予当前用户,或者是没有创建PLUSTRACE角色。
要解决这个问题,执行如下语句即可:
SQL> conn / as sysdba
SQL> @G:\oracle\product\10.2.0\db_1\sqlplus\admin\plustrce.sql
然后autotrace就能正常开启了。
SQL> set autotrace ON
SQL>
问题解决。
以下是plustrace.sql的内容:
--
-- Copyright (c) Oracle Corporation 1995, 2002. All Rights Reserved.
--
-- NAME
-- plustrce.sql
--
-- DESCRIPTION
-- Creates a role with access to Dynamic Performance Tables
-- for the SQL*Plus SET AUTOTRACE ... STATISTICS command.
-- After this script has been run, each user requiring access to
-- the AUTOTRACE feature should be granted the PLUSTRACE role by
-- the DBA.
--
-- USAGE
-- sqlplus "/ as sysdba" @plustrce
--
-- Catalog.sql must have been run before this file is run.
-- This file must be run while connected to a DBA schema.
set echo on
drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$mystat to plustrace;
grant plustrace to dba with admin option;
set echo off
随意执行一个查询语句
SQL> set autotrace traceonly explain-------------------只显示执行计划
SQL> select job,ename from emp;
执行计划
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 14 | 196 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMP | 14 | 196 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Time是衡量系统效率的重要指标。关于autotrace,在本文中只做粗浅了解,如何使用这个功能来实现对SQL的优化,会放到后面来讨论。
参考:https://docs.oracle.com/cd/B10500_01/server.920/a96533/autotrac.htm
4.Q&A
4.1 Q:何如编辑脚本文件?
A:(1)通过ed直接进行编辑;
SQL> ed G:\Oracle\sql\test
(2)GET指令先将文件内容存入缓存,再使用C、A、n、DEL等指令进行修改,最后SAVE;
SQL> GET G:\Oracle\sql\test
SQL> /*修改缓存区内容*/
SQL> SAVE G:\Oracle\sql\test
已创建 file G:\Oracle\sql\test.sql