更改Sql*plus的提示符
正常登陆sql*plus的步骤如下:
sbdatabase*orcl-/home/oracle>sqlplus /nolog
SQL*Plus: Release 10.2.0.3.0 - Production on Sun May 9 19:50:24 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
SQL> conn hmsimis/test@orcl
Connected.
SQL>
可以看到前面的提示符是SQL,现在想修改提示的内容,该怎么办?在oracle10g中已经为我们提供了几个预先定义的变量可以让我们用来显示,比如下面这样:
SQL> define
DEFINE _DATE = "09-MAY-10" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl" (CHAR)
DEFINE _USER = "HMSIMIS" (CHAR)
DEFINE _PRIVILEGE = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1002000300" (CHAR)
DEFINE _EDITOR = "vi" (CHAR)
DEFINE _O_VERSION = "Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options" (CHAR)
DEFINE _O_RELEASE = "1002000300" (CHAR)
SQL>
通过set sqlprompt 命令,可以修改现实的内容, 比如像下面这样:
SQL> set sqlprompt '_USER _DATE > '
HMSIMIS 09-MAY-10 >
这里使用了两个oracle已经定义的变量来定义显示的内容,可以看到目的已经到,如果oracle找不到在defined中定义的则原样输出,比如“>”原样输出了。
如果我们想显示的内容在以上define中没有定义怎么办?还是有办法的,通过构造我们的信息让其显示,比如下面这样:
HMSIMIS 09-MAY-10 > column session_info new_value sql_prompt
HMSIMIS 09-MAY-10 > select '('||SID||','||serial#||','||')' session_info from v$session where username='HMSIMIS' and status='ACTIVE';
SESSION_INFO
------------------------------------------------------------------------------------
(957,6312,)
HMSIMIS 09-MAY-10 > set sqlprompt 'sql_prompt >';
(957,6312,) >
这样一来想显示任何东西都不成问题了,是不是很有意思!
相关文档:
1.多where,少having
where用来过滤行,having用来过滤组
2.多union all,少union
union删除了重复的行,因此花费了一些时间
3.多Exists,少in
Exists只检查存在性,性能比in强很多,有些朋友不会用Exists,就举个例子
例,想要得到有电话号码的人的基本信息,table2有冗余信息
select * from table1;--(id,n ......
一个例子:从tszl表中查出数据,根据cs字段的值决定往BOOK_SERIAL表中插入几行数据。
declare @num int
declare @id varchar(60)
declare @classbm varchar(60)
set @classBm='101'
declare id cursor for select id,cs from [tszl]
open id
fetch next from id into @id,@num
while @@fetch_status!=-1
&nb ......
1 ---上个月月初第一天
2 select CONVERT(varchar(12) , DATEADD(mm,DATEDIFF(mm,0,dateadd(mm,-1,getdate())),0), 112 )
3
4 ---上个月月末最后一天
5 select CONVERT(varchar(12),dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate()),0)), 112 )
6
7 ......
比如现在有一人员表 (表名:peosons)
若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来
select p1.* from persons p1,persons p2 where p1.id<>p2.id and p1.cardid &nbs ......
1.查询连接到某数据库的连接数
select count(*) as 连接数 from master..sysprocesses where db_name(dbid)='数据库名' ......