现在的位置: 首页 > 综合 > 正文

Oracle SQLPlus 一些使用经验记录(设置环境变量和字符串比较)

2013年10月11日 ⁄ 综合 ⁄ 共 2215字 ⁄ 字号 评论关闭

今天继续在Oracle 数据库中摸索,按流水帐记一下今天的经验吧。

昨天连在服务器上的时候,被服务器给断掉了,一度我的用户名和密码还不能用了,今天再连,发现又可以了,不知道管理员他们在干什么。

但是当我在SQLPlus 中执行一条查询语句后,我发现返回的结果最后少了一句“已选择XXX行。”没有这句怎么行呢!怎么会这样?

这句话不会是SQL语句返回的,应该是在系统变量里设置,但是是哪个变量呢?根据前面掌握的知识用Help Set 查看一下吧,所有可设置的变量都在里面了。阅读完长长的帮助文件,确定是“Feedback”这个变量。根据说明,Feedback 显示查询返回的记录数(shows the number of records returned by a query)。在提示符下输入:

SQL> set feedback on

可以用Show Feedback 命令查看Feedback变量的状态。我用了一段时间退出SQLPlus后再连,发现这次不用我设了,show feedback 变量,显示值为6,看来服务器上可以设置客户端的环境。注意,当set feedback  n的时候,返回记录数大于等于n才显示反馈,小于则不显示。

在读Set长长的帮助信息时,我还注意到一个很有用的变量,autotrace,其实我在看到feedback变量之前先注意到autotrace的。Autotrace 显示SQL语句成功执行的报告。跟MS SQL Server的SQL 查询分析器相比,它的两个参数,explain 类似于SQL 查询分析器的“显示执行计划”, statistics 类似于“显示客户统计”。输入:

SQL> set autotrace on

屏幕返回:
SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色
SP2-0611: 启用STATISTICS报告时出错

(英文界面下:
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
)

看样子,我的权限不够,只能启用explain,而不能启用statistics(用show autotrace 检查一下)。
根据文档说明,要访问 STATISTICS 数据,必须要能访问几个 Dynamic Performance 表。用 SYS 身份运行PLUSTRCE.SQL创建一个角色,再把这个角色授予要使用SET AUTOTRACE命令的用户。
要使用 EXPLAIN 选项,首先要在自己的 schema中创建 PLAN_TABLE 表。用 UTLXPLAN.SQL 创建这张表。

把 set autotrace 的几个用法列一下:
(1) set autotrace on explain; ——只显示执行计划

返回的信息大概是这个样子的:
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (FULL) OF 'MY_TEST''
  
(2) set autotrace on statistics; ——只显示统计信息

返回的信息大概是这个样子的:
Statistics
----------------------------------------------------------
0 recursive calls
4 db block gets
2 consistent gets
0 physical reads
0 redo size
1320 bytes sent via SQL*Net to client
654 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
4 rows processed

(3) set autotrace traceonly explain; ——只显示执行计划,与set autotrace on explain 相比不会执行语句,对于查看大表的执行计划比较有用。但是如果也指定了 STATISTICS,即set autotrace traceonly explain statistics,SQL*Plus仍然从服务器抓取查询数据,只是不显示而已。

ON 或 TRACEONLY 不带参数的话等同于 EXPLAIN STATISTICS。

当设置 FIPS 标志位或在TRUSTED Oracle 中,AUTOTRACE 不可用。


其它可设置的环境变量。

 

SQL> set timing on
SQL> show timing
显示SQL语句执行的时间统计。

SQL> SET SERVEROUTPUT ON

显示 DBMS_OUTPUT.PUT_LINE 的输出。  


今天还碰到一个跟NULL 字符串比较的问题。在Oracle中,变量默认被初始化为NULL,零长度的字符串也是NULL ('') 。NOT NULL 返回的也是 NULL。不确定的反面也是不确定。
跟Null 比较的结果总是NULL。在条件控制语句中,如果条件产生的结果是NULL,后面相关的语句是不会被执行的。
TRUE and NULL 是NULL,TRUE or NULL 则是TRUE。
FALSE and NULL 是FALSE,FALSE or NULL 则是NULL。

抱歉!评论已关闭.