sqlplus小窍门:设置输出数据的分割符

默认情况下,sqlplus中执行select输出的结果中,列和列之间是以空格分隔的

SQL> show colsep
colsep ” ”

这个分隔符可以通过使用SET COLSEP { ” ” | text}命令来自定义

以逗号分隔:

SQL> set colsep “,”
SQL> select object_id,object_name from all_objects where rownum<2; OBJECT_ID,OBJECT_NAME ----------,------------------------------ 20,ICOL$

以|分隔

SQL> set colsep “|”
SQL> select object_id,object_name from all_objects where rownum<2; OBJECT_ID|OBJECT_NAME ----------|------------------------------ 20|ICOL$

以Tab键分隔,这个有点特殊,因为无法直接输入tab键,有个处理的小技巧

SQL> col TAB# new_value TAB NOPRINT
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的工作效率,何乐而不为呢?

SQL> show parameter timed_statistics

NAME TYPE VALUE
———————————— ———– ——————————
timed_statistics boolean TRUE
SQL> show spparameter timed_statistics

SID NAME TYPE VALUE
——– —————————– ———– —————————-
* timed_statistics boolean

Read more of this post

使用PRODUCT_USER_PROFILE表增强SQL*Plus的安全性

在oracle中,我们一般通过授权和角色来控制用户的权限,但是某些情况下,比如想限制以dev开头的所有用户不能在sql*plus中执行alter命令,则通过grant授权的方式无法实现。这里要介绍另外一种能简单的实现上述需求的方式,就是PRODUCT_USER_PROFILE表,通过在该表中插入相应的记录,可以限制某些用户(可以使用通配符)在SQL*Plus中使用某些命令,但这只是SQL*Plus提供的特性,而不是数据库本身的控制,所以在其他连接到数据库的客户端中该限制将不可用。

在oracle9i开始提供该特性,如果创建的数据库中没有默认创建PRODUCT_USER_PROFILE表,也可以通过执行以下脚本手工创建(以system用户):

SYS@ning>conn system/password
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

Read more of this post

sqlplus小窍门:通过http执行远程脚本

我们知道,sqlplus中使用@或者@@可以直接脚本中的sql语句,但一般情况下执行本地脚本。实际上sqlplus也可以通过http执行远程服务器上的脚本。


C:\>sqlplus /nolog

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服务,就可以在网络中的任何机器上调用这些脚本来方便我们的工作了。

无觅相关文章插件,快速提升流量