sqlplus小窍门:设置输出数据的分割符
默认情况下,sqlplus中执行select输出的结果中,列和列之间是以空格分隔的
colsep " "
这个分隔符可以通过使用SET COLSEP { ” ” | text}命令来自定义
以逗号分隔:
SQL> select object_id,object_name from all_objects where rownum<2;
OBJECT_ID,OBJECT_NAME
----------,------------------------------
20,ICOL$
以|分隔
SQL> select object_id,object_name from all_objects where rownum<2;
OBJECT_ID|OBJECT_NAME
----------|------------------------------
20|ICOL$
以Tab键分隔,这个有点特殊,因为无法直接输入tab键,有个处理的小技巧
SQL> select chr(9) TAB# from dual;
SQL> set colsep "&TAB"
SQL> select object_id,object_name from all_objects where rownum<2;
OBJECT_ID OBJECT_NAME
---------- ------------------------------
20 ICOL$
Oracle11g sql*plus新特性:show spparameters
在sql*plus中显示某个或者某些初始化参数的值,我们已经习惯了用show parameter/show parameters命令,这个命令的结果显示的是v$parameter视图中的信息。在我以前的一篇文章中,简单说明了v$parameter,v$system_parameter和v$spparameter视图的区别。如果我们使用alter system set parameter=value scope=spfile命令修改了spfile中的参数值,但是保留了memory中的参数值,通过show parameter则无法显示spfile中的信息。在Oracle11g之前,只有通过直接查询v$spparameter视图获得spfile中的参数设置。而在Oracle11g中,终于也提供了一个类似的新命令,这就是show spparameter/show spparameters。Oracle在一些细节方面也是在做出持续不断的改进,虽然这些改进可有可无,不过只要这些改变能提升DBA的工作效率,何乐而不为呢?
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
timed_statistics boolean TRUE
SQL> show spparameter timed_statistics
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ----------------------------
* timed_statistics boolean
使用PRODUCT_USER_PROFILE表增强SQL*Plus的安全性
在oracle中,我们一般通过授权和角色来控制用户的权限,但是某些情况下,比如想限制以dev开头的所有用户不能在sql*plus中执行alter命令,则通过grant授权的方式无法实现。这里要介绍另外一种能简单的实现上述需求的方式,就是PRODUCT_USER_PROFILE表,通过在该表中插入相应的记录,可以限制某些用户(可以使用通配符)在SQL*Plus中使用某些命令,但这只是SQL*Plus提供的特性,而不是数据库本身的控制,所以在其他连接到数据库的客户端中该限制将不可用。
在oracle9i开始提供该特性,如果创建的数据库中没有默认创建PRODUCT_USER_PROFILE表,也可以通过执行以下脚本手工创建(以system用户):
SYSTEM@NinGoo>@$ORACLE_HOME/sqlplus/admin/pupbld.sql
SYSTEM@ning>desc product_user_profile
Name Null? Type
----------------------------------------- -------- ----------------------------
PRODUCT NOT NULL VARCHAR2(30)
USERID VARCHAR2(30)
ATTRIBUTE VARCHAR2(240)
SCOPE VARCHAR2(240)
NUMERIC_VALUE NUMBER(15,2)
CHAR_VALUE VARCHAR2(240)
DATE_VALUE DATE
LONG_VALUE LONG
sqlplus小窍门:通过http执行远程脚本
我们知道,sqlplus中使用@或者@@可以直接脚本中的sql语句,但一般情况下执行本地脚本。实际上sqlplus也可以通过http执行远程服务器上的脚本。
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Sep 16 00:06:37 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
@>conn ning/ning@10g
Connected.
NING@10g>@http://10.0.12.102/test.sql
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
NING@10g>conn ning/ning@11g
Connected.
NING@11g>@http://10.0.12.102/test.sql
BANNER
---------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Linux: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
有了这个特性,我们就可以将一些常用的脚本集中存放在一台server上,并且开启http服务,就可以在网络中的任何机器上调用这些脚本来方便我们的工作了。