SQL/PLUS学习笔记
来源:互联网 发布:数据挖掘岗很难进吗 编辑:程序博客网 时间:2024/05/22 08:12
说明:在学习小布老师的视频课程的实践中,整理的笔记,备忘,自己忘记的时候看一下!
1. SQL Buffer
(1).只存储一条SQL命令;
(2).save命令将当前的SQL Buffer中的SQL命令输出到磁盘上的一个指定文件名的文件里面;
eg: SQL>save c:/hr 回车后再C盘生成文件hr.sql文件
(3).list命令:显示当前SQL缓冲区中的SQL命令;
(4).run和/(slash-斜线号),运行SQL Buffer中的SQL命令,前者先显示要执行的SQL命令再
显示运行结果,而后者直接显示运行结果;
(5).要想在sqlplus的终端中显示打印结果,必须设置参数:serveroutput
SQL> show serveroutput
serveroutput OFF
可以看出serveroutput是关闭的,通过以下命令设置你为打开状态:
SQL> set serveroutput on
SQL> show serveroutput
serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
eg:
SQL> declare
2 x varchar2(15) :='Hello World !';
3 begin
4 dbms_output.put_line(x);
5 exception
6 when others then
7 dbms_output.put_line('Error!');
8 end;
9 .
SQL> list
1 declare
2 x varchar2(15) :='Hello World !';
3 begin
4 dbms_output.put_line(x);
5 exception
6 when others then
7 dbms_output.put_line('Error!');
8* end;
上面的.表示PL/SQL块输入结束,但是并不执行;
输入list命令后会将SQL Buffer中的该语句块显示出来;
如上面所示最后一行用*标记,也是当前行。
再次输入/(slash)回车后执行;会将Hello World!打印出来:
SQL> /
Hello World !
PL/SQL 过程已成功完成。
2. 运行操作系统命令
(1).SQL> host + 操作系统命令;
(2).host的等价命令:Windows下是 $; Linux下是!;
3. pause命令
语法:set pau[se] {on | off | text}
SQL> show pau
PAUSE 为 OFF --暂停功能被关闭
SQL> show pagesize
pagesize 14 --分页显示,每页的记录数为14条
eg:
SQL> set pau on
SQL> show pau
PAUSE 为 ON 并设为 " "
SQL> select * from t_1; --回车后会暂停,再回车显示第一页14条记录;再回车下一页;
ID NAME
---------- --------------------
1 Taowei
2 Taowei
3 Taowei
4 Taowei
5 Taowei
6 Taowei
7 Taowei
8 Taowei
9 Taowei
10 Taowei
13 kk
eg:
SQL> set pau '$$$$$$$$$$$$$$$$$$$$$$$$' --以'$$$$$$$$$$$$$$$$$$$$$$$$'分隔每页
SQL> select * from t_1 order by id;
$$$$$$$$$$$$$$$$$$$$$$$$
ID NAME
---------- --------------------
1 Taowei
2 Taowei
3 Taowei
4 Taowei
5 Taowei
6 Taowei
7 Taowei
8 Taowei
9 Taowei
10 Taowei
11 boobooke
$$$$$$$$$$$$$$$$$$$$$$$$
4. SQL的自动提交功能
SQL的自动提交功能默认情况下是关闭的,这样更加合理,以免误操作时可以rollback回滚;
通过设置autocommit参数可以打开SQL的自动提交功能:
eg:
SQL> show auto
autocommit OFF
SQL> set auto on
SQL> insert into t_1 values(51,'Heihei');
已创建 1 行。
提交完成。
否则当前用户插入的记录在未commit的情况下指示保存在内存里面,也只有当前用户能select
其他用户是看不到的;除非commit了。
5. 编辑脚本
敲入define命令可以看到SQL/PLUS可以设置的环境变量
SQL> define
DEFINE _DATE = "14-8月 -11" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl" (CHAR)
DEFINE _USER = "EMC" (CHAR)
DEFINE _PRIVILEGE = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1002000100" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.2.0.
1.0 - Production
With the Partitioning, OLAP and Data Mining options" (CHAR)
DEFINE _O_RELEASE = "1002000100" (CHAR)
其中_editor可以设置默认的脚本编辑器,当设置好以后可以输入命令:SQL> edit file.sql
来编辑脚本文件,在未指定路径的情况下文件保存在操作系统的当前路径下。也可以通过切换
到操作系统命令环境下,编辑好脚本,然后用@,@@或start + 脚本的路径来执行。
eg:
SQL> edit file --file.sql文件默认生成在当前目录下,或者先切换到操作系统,编辑好
脚本后执行,扩展名缺省为sql;
SQL> $
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\hawk>dir
驱动器 C 中的卷是 C
卷的序列号是 4D28-FE45
C:\Documents and Settings\hawk 的目录
2011-01-09 00:50 <DIR> .
2011-01-09 00:50 <DIR> ..
2011-01-09 00:31 <DIR> 「开始」菜单
2011-01-09 01:18 <DIR> My Documents
2011-01-09 01:18 <DIR> Favorites
2011-01-09 00:31 <DIR> 桌面
2011-01-09 15:17 <DIR> .myeclipse
2011-01-09 15:17 <DIR> .m2
2011-06-20 14:52 128 .myeclipse.properties
2011-08-14 10:45 8 MagicEmotions.idx
2011-01-18 09:58 25 .pulse2.locator
2011-01-20 20:58 <DIR> EurekaLog
2011-08-11 10:23 225,685 sqlnet.log
2011-05-03 09:29 <DIR> workspace
2011-08-13 13:30 89 afiedt.buf
2011-05-29 23:59 <DIR> Tracing
2011-08-14 23:46 18 file.sql --在里面输入select * from t_1;后保存
6 个文件 225,953 字节
11 个目录 8,195,407,872 可用字节
C:\Documents and Settings\hawk>exit --输入exit命令返回到sqlplus
SQL> @file --运行脚本,下面是执行结果;另外输入@@file或者start file是一样的
ID NAME
---------- --------------------
1 Taowei
2 Taowei
3 Taowei
4 Taowei
5 Taowei
6 Taowei
7 Taowei
8 Taowei
9 Taowei
10 Taowei
13 kk
编辑缓冲区中的当前行(current line)的命令:
(1).change (enable you to change the current line)
首先用list命令变换当前行(或者直接输入行号,回车也可改变当前行):
SQL> l --显示缓冲区中内容
1 select * from t1
2 where id>1
3* and id<2 --*号为默认的当前行
SQL> l 2 --list 2将当前行变为第二行,但是这并不影响list的当前行(注意)
2* where id>1
SQL> l
1 select *
2 from t1
3 where
4 id<90 --现在想把第四行的90改成85
5* and id>80
SQL> l 4 --先改变当前行到第四行
4* id<90
SQL> c/90/85 --change命令的用法
4* id<100
SQL> l --用list命令显示发现90已经变成了85,这是可以用slash或run运行该新的SQL语句
1 select *
2 from t1
3 where
4 id<85
5* and id>80
SQL> run
1 select *
2 from t1
3 where
4 id<85
5* and id>80
ID NAME
---------- --------------------
81 Testing
82 Testing
83 Testing
84 Testing
(2).append(追加)
首先用list命令变换当前行(或者直接输入行号,回车也可改变当前行):
SQL> l
1 select id,name
2 from t1
3 where
4 id<85 --在后面添加and name='Oracle'
5* and id>80
SQL> 4 --改变当前行
4* id<85
SQL> a and name='Oracle' --注意这里a和and之间有两个空格,如果只有一个的话
4* id<85 and name='Oracle' --85和and会挨在一起
SQL> l --list显示文本已追加
1 select id,name
2 from t1
3 where
4 id<85 and name='Oracle'
5* and id>80
SQL> /
ID NAME
---------- --------------------
83 Oracle
(3).input命令
在当前行后面插入一个新行(to insert a new line after the current line)
首先用list命令变换当前行(或者直接输入行号,回车也可改变当前行)
定位到你要插入新行,然后i + 要插入的文本:
eg:
(这个比较特殊)在第一行前面加一段注释/* this is a testing demo! */
SQL> 0 /* this is a testing demo! */ --就在第一行前面加上了该注释
SQL> l
1 select id,name
2 from t1
3 where
4 id<85 --在第四行的下面插入一个新行
5* and id>80
SQL> 4 --先变换当前行为第四行
4* id<85
SQL> i --this is a demo! --input + text(要插入的文本)
SQL> l
1 select id,name
2 from t1
3 where
4 id<85
5 --this is a demo!
6* and id>80
SQL> /
ID NAME
---------- --------------------
81 Testing
82 Testing
83 Oracle
84 Testing
SQL> 5 --将当前行改为5,在其后加一行,添加新的查询条件and name='Oracle'
5* --this is a demo!
SQL> i and name='Oracle' --插入
SQL> l
1 select id,name
2 from t1
3 where
4 id<85
5 --this is a demo!
6 and name='Oracle'
7* and id>80
SQL> /
ID NAME
---------- --------------------
83 Oracle
(4).del删除行命令
a.del n --删除第n行
b.del n m --删除从n到m行
c.del n * --删除从第n行到当前行
d.del n last --删除第n行到最后一行
6. (1).ECHO
如果想在终端将每执行的一条SQL语句都打印出来需要设置echo参数
SQL> show echo --显示echo的状态
echo OFF --此时echo是OFF状态
SQL> set echo on --设置其为开状态
SQL> show echo
echo ON --已经打开
此时运行脚本的话,脚本中的每条SQL语句或PL/SQL块将会显示在终端,如下运行test脚本:
SQL> @test --其下面均为终端显示的内容
SQL> select *from t1 where rownum<2;
ID NAME
---------- --------------------
1 Testing
SQL>
SQL> truncate table t1;
Table truncated.
SQL>
SQL> begin
2
3 for i in 1 .. 1000 loop
4
5 insert into t1 values(i,'Testing');
6 end loop;
7 commit;
8
9 end;
10 /
PL/SQL procedure successfully completed.
SQL>
SQL> select count(*)from t1;
COUNT(*)
----------
1000
(2).使用SPOOL保存查询的结果集
SQL> spool outputfile --默认在当前路径下生成outputfile.lst文件
SQL> select * from t1 where rownum<3;
ID NAME
---------- --------------------
1 Testing
2 Testing
SQL> spool off --终止,此时这些内容全部被写入文件outputfile中
[oracle@localhost ~]$ cat outputfile.lst --查看文件内容如下:
SQL> select * from t1 where rownum<3;
ID NAME
---------- --------------------
1 Testing
2 Testing
SQL> spool off
这个功能可以帮助生成一些动态的批量处理的脚本,比方说删除用户emcd下的
满足某些条件的表:
SQL> show user
USER is "EMCD"
SQL> spool droptable.sql
SQL> select 'drop table'||objec_name from user_objects where object_type='TABLE';
select 'drop table'||objec_name from user_objects where object_type='TABLE'
*
ERROR at line 1:
ORA-00904: "OBJEC_NAME": invalid identifier
SQL> l
1* select 'drop table'||objec_name from user_objects where object_type='TABLE'
SQL> c/objec_/object_
1* select 'drop table'||object_name from user_objects where object_type='TABLE'
SQL> /
'DROPTABLE'||OBJECT_NAME
--------------------------------------------------------------------------------
drop tableT1
drop tableBIN$qokoVJ6g4HHgQAB/AQAzMg==$0
drop tableTOAD_PLAN_TABLE
SQL> l
1* select 'drop table'||object_name from user_objects where object_type='TABLE'
SQL> c/'drop table'/'drop table '
1* select 'drop table '||object_name from user_objects where object_type='TABLE'
SQL> /
'DROPTABLE'||OBJECT_NAME
--------------------------------------------------------------------------------
drop table T1
drop table BIN$qokoVJ6g4HHgQAB/AQAzMg==$0
drop table TOAD_PLAN_TABLE
SQL> spool off --结束输入
SQL> !
[oracle@localhost ~]$ cat droptable.sql --查看输出内容,如下所示:
SQL> select 'drop table'||objec_name from user_objects where object_type='TABLE';
select 'drop table'||objec_name from user_objects where object_type='TABLE'
*
ERROR at line 1:
ORA-00904: "OBJEC_NAME": invalid identifier
SQL> l
1* select 'drop table'||objec_name from user_objects where object_type='TABLE'
SQL> c/objec_/object_
1* select 'drop table'||object_name from user_objects where object_type='TABLE'
SQL> /
'DROPTABLE'||OBJECT_NAME
--------------------------------------------------------------------------------
drop tableT1
drop tableBIN$qokoVJ6g4HHgQAB/AQAzMg==$0
drop tableTOAD_PLAN_TABLE
SQL> l
1* select 'drop table'||object_name from user_objects where object_type='TABLE'
SQL> c/'drop table'/'drop table '
1* select 'drop table '||object_name from user_objects where object_type='TABLE'
SQL> /
'DROPTABLE'||OBJECT_NAME
--------------------------------------------------------------------------------
drop table T1
drop table BIN$qokoVJ6g4HHgQAB/AQAzMg==$0
drop table TOAD_PLAN_TABLE
SQL> spool off
这样动态删除某些表的SQL语句就生成了。
(3).启动sqlplus时就运行一个脚本:
[oracle@localhost ~]$ sqlplus emcd@oracle_120 @test
- sql*plus学习笔记
- SQL/PLUS学习笔记
- Oracle学习笔记二:SQL*PLUS基础
- SQL*Plus学习笔记(一)
- SQL*Plus学习笔记(二)
- Oracle学习笔记二-Sql*Plus常用命令
- oracle10g 学习笔记---sql*plus常用命令1
- ORACLE学习笔记 (六) (SQL*PLUS)
- Oracle SQL Plus Tutorial 学习笔记
- Oracle 11g学习笔记--SQL * plus
- Oracle学习笔记-第三章-SQL语言与SQL Plus
- SQL*Plus 使用笔记!!!
- sql*plus 学习
- 20130828SQL PLus学习
- Oracle SQL Plus 的基本操作 - Oracle 学习笔记 1
- SQL*Plus 学习笔记——常用编辑命令
- oracle学习笔记3.1 SQL*Plus-连接数据库
- oracle学习笔记3.2 SQL*Plus-命令使用1
- usaco contact
- Prime算法
- cocoa 文件操作
- V4L2采集摄像头数据
- Java集合中常用的接口和类
- SQL/PLUS学习笔记
- java invoke 2【动态调用类的方法】
- Lucene.Net的学习心得
- Nginx源码分析链接
- 带头结点和不带头结点的单链表的尾插法以及各种操作
- RPM 软件包的管理与安装
- 成员函数指针与高性能的C++委托
- Union和Union All的区别
- 快译实现报表模板打印