|
|
|
|
移动端

2.3.6 其他SQL*Plus任务(1)

《Oracle PL/SQL程序设计(第6版)(上下册)》第2章创建和运行PL/SQL代码,本章将展示如何在一个最基本的层面上(使用SQL*Plus)完成上述任务,同时对这些细小差别进行大致的讲述。本节为大家介绍其他SQL*Plus任务。

作者:方鑫 译来源:人民邮电出版社|2017-09-06 20:00

技术沙龙 | 6月30日与多位专家探讨技术高速发展下如何应对运维新挑战!


2.3.6 其他SQL*Plus任务(1)

SQL*Plus有大量命令,但由于本书篇幅有限,我们只能介绍那些特别重要的、或是特别让人困惑的少数一些命令。如果想彻底了解这个神奇的产品,可以去买一本由Jonathan Gennick写的OracleSQL*Plus:The Definitive Guide。如果想要快速参考,那么可以选择他的另一本 Oracle SQL*Plus:Pocket Reference。

个性化设置

我们可以对SQL*Plus进行个性化设置,通过命令行的方式改变它内置的变量值和设置。我们已在上面的示例中看到了SET SERVEROUTPUT命令,SQL*Plus中的SET命令有许多选项,如SET SUFFIX(改变默认的文件扩展名)、SET LINESIZE n (设置显示时每行最大字符数,超过部分进行折行处理)等,可以用下面的命令来查看当前会话的各选项的值:

  1. SQL> SHOW ALLSQL*Plus 

也可以创建和操作它自己的一些内存变量,它预留了一些特殊的变量,这些变量可以影响它的行为。实际上,SQL*Plus中有两类变量:DEFINE和绑定变量。我们可以使用DEFINE命令给一个DEFINE变量赋值:

  1. SQL> DEFINE x = "the answer is 42" 

如要查看x的值,可以这样:

  1. SQL> DEFINE x  
  2. DEFINE X = "the answer is 42" (CHAR) 

若要引用这样的变量,需要使用连接符号“&”。SQL*Plus在把语句发送给Oracle数据库之前,会对变量做一个简单的替代,所以当我们希望一个字符串被当作变量进行替代,我们就需要把它用单引号括起来:

  1. SELECT '&x' FROM DUAL; 

对于绑定变量,我们需要首先对它进行声明,然后就可以在PL/SQL里使用它了,如要显示它的值,就用SQL*Plus里的PRINT命令:

  1. SQL> VARIABLE x VARCHAR2(10)  
  2. SQL> BEGIN  
  3. 2 :x :'hullo';  
  4. 3 END;  
  5. 4 /  
  6. PL/SQL procedure successfully completed.  
  7. SQL> PRINT :x  
  8. X  
  9. --------------------------------  
  10. hullo 

在这里,读者可能有点小困惑,因为现在出现了两个不同的变量“x”,一个是定义出来的,一个是声明出来的:

  1. SQL> SELECT :x, '&x' FROM DUAL;  
  2. old 1: SELECT :x, '&x' FROM DUAL  
  3. new 1: SELECT :x, 'the answer is 42' FROM DUAL  
  4. :X 'THEANSWERIS42'  
  5. -------------------------------- ----------------  
  6. hullo the answer is 42 

只需记住,DEFINE的变量总是被SQL*PLUS当作扩展的字符串使用,而DECLARED的变量可以被SQL和PL/SQL当作真正的绑定变量使用。

将输出保存到文件

时不时地,我们需要把一个SQL*Plus会话的输出保存到一个文件中去——用于生成报告,或是记录我们的操作过程,或是我们需要把执行的命令记录下来以便日后再次运行。在SQL*Plus中,一个简便的方法是使用SPOOL命令:

  1. SQL> SPOOL report  
  2. SQL> @run_report 

……输出的内容不断向下滚动,同时写入名为report.lst的文件……

  1. SQL> SPOOL OFF 

上述示例中的第一条命令,SPOOL report,告诉SQL*Plus将后续的所有输出保存到report.lst文件中。文件扩展名.lst是默认的,可以通过在SPOOL命令中指定扩展名来改变默认扩展名:

  1. SQL> SPOOL report.txtSPOOL OFF 

命令告诉SQL*Plus,停止将输出保存到文件,同时关闭文件。

退出SQL*Plus

使用EXIT命令,可以退出SQL*Plus,返回到操作系统环境:

  1. SQL> EXIT 

如果我们退出之前还在进行SPOOL,那么SQL*Plus会自动停止SPOOL并关闭文件。

如果我们在会话中修改了一些表的数据,没有用显式的事务控制语句结束事务,就退出SQL*Plus,会有什么后果?默认地,SQL*Plus退出前会强制进行事务提交(COMMIT),特殊情况是因为SQL错误而导致会话终止,并且我们在SQL*Plus会话里发出过WHENEVER SQLERROR EXIT ROLLBACK指令(参见2.3.7节)。

若要断开数据库连接,但仍留在SQL*Plus环境,可以使用DISCONNECT命令,这个命令的表现是这样的:

  1. SQL> DISCONNECT  
  2. Disconnected from Personal Oracle Database 10g Release 10.1.0.3.0 - Production  
  3. With the Partitioning, OLAP and Data Mining options  
  4. SQL> 

切换连接时,我们无需使用DISCONNECT命令——我们只要再发一条CONNECT命令即可,SQL*Plus会断开前一个连接,再建立新的连接。但实际上,有时断开再重新连接实属必要:如果我们正在使用操作系统验证,脚本就可能会自动重新连接,但使用的是错误的账号,作者曾经见过这样的情况。

编辑语句

SQL*Plus会在缓存中保留最新接收的一些语句,我们可以对这些语句进行编辑,既可以使用内置的行编辑器,也可使用任意的外部编译器。下面我演示如何设置和使用一个外部编辑器。

EDIT命令,可以使得SQL*Plus把当前保留在缓存中的命令存储到一个文件去,暂时停止SQL*Plus并调用编译器:

  1. SQL> EDIT 

保存命令的文件名默认是afiedt.buf,我们也可以使用SET EDITFILE命令进行修改。或者,如果我们想编辑一个现有的文件,只需把文件名作为EDIT命令的变量:

  1. SQL> EDIT abc.pkg 

一旦我们保存文件并退出编辑器,SQL*Plus会话就将新边界的文件内容读入缓存,然后会话继续。

Oracle默认的外部编辑器是:

UNIX、Linux相关操作系统使用ed.。

Windows系列使用Notepad。

虽然默认编译器的选择已经被硬编码到sqlplus可执行文件中了,我们仍然可以通过设置SQL*Plus的_EDITOR变量的值,来轻松地改变当前的编码器。下面的示例就是作者经常用到的:

SQL> DEFINE _EDITOR = /bin/vi/bin/vi是一款“怪人”们常用的编辑软件的全路径。为安全考虑,建议在这里使用编辑器的全路径名称。

如果我们只想使用SQL*Plus内置的行编辑器(也确实挺方便的),有一些基本的命令需要了解:

L

显示最后使用的语句。

n

把语句的第n行作为当前行。

DEL

删除当前行。

C/old/new

当前行中,把第一个出现的old替换成new。分隔符(这里是一个斜杠)可以是任意字符。

n text

把text作为第n行的内容。

I

在当前行之后插入一行。若要在当前行之前插入一行,使用0行命令(即“0 text”)。

喜欢的朋友可以添加我们的微信账号:

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

3D游戏开发大全(高级篇)

在我的第一本书——《3D游戏开发大全》中,我们曾经对3D游戏开发完成了一次犹如探索原始丛林般的旅程:首先,我们对3D游戏产业进行了初步了...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊