oracle傻瓜101-280问

101. 如何搜索出前N条记录?

SELECT * FROM empLOYEE WHERE ROWNUM < n
ORDER BY empno;

 

102. 如何知道机器上的Oracle支持多少并发用户数?

SQL>conn internal ;
SQL>show parameter processes ;

 

103. db_block_size可以修改吗?

一般不可以﹐不建议这样做的。

 

104. 如何统计两个表的记录总数?

select (select count(id) from aa)+(select count(id) from bb) 总数 from dual;

 

105. 怎样用Sql语句实现查找一列中第N大值?

select * from
(select t.*,dense_rank() over (order by sal) rank from employee)
where rank = N;

 

 

106. 如何在给现有的日期加上2年?(

select add_months(sysdate,24) from dual;

 

107. USED_UBLK为负值表示什么意思?

It is "harmless".

 

108. Connect string是指什么?

应该是tnsnames.ora中的服务名后面的内容

 

109. 怎样扩大REDO LOG的大小?

建立一个临时的redolog组,然后切换日志,删除以前的日志,建立新的日志。

 

110. tablespace 是否不能大于4G?

没有限制.

 

111. 返回大于等于N的最小整数值?

SELECT CEIL(N) FROM DUAL;

 

112. 返回小于等于N的最小整数值?

SELECT FLOOR(N) FROM DUAL;

 

113. 返回当前月的最后一天?

SELECT LAST_DAY(SYS2003-10-17) FROM DUAL;

 

114. 如何不同用户间数据导入?

IMP SYSTEM/MANAGER FILE=AA.DMP FROMUSER=USER_OLD TOUSER=USER_NEW ROWS=Y INDEXES=Y ;

 

115. 如何找数据库表的主键字段的名称?

SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and table_name='TABLE_NAME';


116. 两个结果集互加的函数?

SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW;


117. 两个结果集互减的函数?
SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;


118. 如何配置Sequence?

建sequence seq_custid
create sequence seq_custid start 1 incrememt by 1;
建表时:
create table cust
{ cust_id smallint not null,
...}
insert 时:
insert into table cust
values( seq_cust.nextval, ...)


日期的各部分的常用的的写法

119>.取时间点的年份的写法:
SELECT TO_CHAR(SYS2003-10-17,'YYYY') FROM DUAL;

 

120>.取时间点的月份的写法:
SELECT TO_CHAR(SYS2003-10-17,'MM') FROM DUAL;

 

121>.取时间点的日的写法:
SELECT TO_CHAR(SYS2003-10-17,'DD') FROM DUAL;

 

122>.取时间点的时的写法:
SELECT TO_CHAR(SYS2003-10-17,'HH24') FROM DUAL;

 

123>.取时间点的分的写法:
SELECT TO_CHAR(SYS2003-10-17,'MI') FROM DUAL;

 

124>.取时间点的秒的写法:
SELECT TO_CHAR(SYS2003-10-17,'SS') FROM DUAL;

 

125>.取时间点的日期的写法:
SELECT TRUNC(SYS2003-10-17) FROM DUAL;

 

126>.取时间点的时间的写法:
SELECT TO_CHAR(SYS2003-10-17,'HH24:MI:SS') FROM DUAL;

 

127>.日期,时间形态变为字符形态
SELECT TO_CHAR(SYS2003-10-17) FROM DUAL;

 

128>.将字符串转换成日期或时间形态:
SELECT TO_2003-10-17('2003/08/01') FROM DUAL;

 

129>.返回参数的星期几的写法:
SELECT TO_CHAR(SYS2003-10-17,'D') FROM DUAL;

 

130>.返回参数一年中的第几天的写法:
SELECT TO_CHAR(SYS2003-10-17,'DDD') FROM DUAL;

 

131>.返回午夜和参数中指定的时间值之间的秒数的写法:
SELECT TO_CHAR(SYS2003-10-17,'SSSSS') FROM DUAL;

 

132>.返回参数中一年的第几周的写法:
SELECT TO_CHAR(SYS2003-10-17,'WW') FROM DUAL;

虚拟字段
133. CURRVAL 和 nextval
为表创建序列
CREATE SEQUENCE EMPSEQ ... ;
SELECT empseq.currval FROM DUAL ;
自动插入序列的数值
INSERT INTO emp
VALUES (empseq.nextval, 'LEWIS', 'CLERK',
7902, SYS2003-10-17, 1200, NULL, 20) ;

134. ROWNUM
按设定排序的行的序号
SELECT * FROM emp WHERE ROWNUM < 10 ;

135. ROWID
返回行的物理地址
SELECT ROWID, ename FROM emp WHERE deptno = 20 ;

136. 将N秒转换为时分秒格式?
set serverout on
declare
N number := 1000000;
ret varchar2(100);
begin
ret := trunc(n/3600) || '小时' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"分 "ss"秒"') ;
dbms_output.put_line(ret);
end;

137. 如何查询做比较大的排序的进程?
SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#,
a.username, a.osuser, a.status
FROM v$session a,v$sort_usage b
WHERE a.saddr = b.session_addr
ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks ;

138. 如何查询做比较大的排序的进程的SQL语句?
select /*+ ORDERED */ sql_text from v$sqltext a
where a.hash_value = (
select sql_hash_value from v$session b
where b.sid = &sid and b.serial# = &serial)
order by piece asc ;

139. 如何查找重复记录?
SELECT * FROM TABLE_NAME
WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

140. 如何删除重复记录?
DELETE FROM TABLE_NAME
WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

141. 如何快速编译所有视图?
SQL >SPOOL VIEW1.SQL
SQL >SELECT ‘ALTER VIEW ‘||TNAME||’
COMPILE;’ FROM TAB;
SQL >SPOOL OFF
然后执行VIEW1.SQL即可。
SQL >@VIEW1.SQL;

142. ORA-01555 SNAPSHOT TOO OLD的解决办法
增加MINEXTENTS的值,增加区的大小,设置一个高的OPTIMAL值。

143. 事务要求的回滚段空间不够,表现为表空间用满(ORA-01560错误),回滚段扩展到达参数 MAXEXTENTS的值(ORA-01628)的解决办法.
向回滚段表空间添加文件或使已有的文件变大;增加MAXEXTENTS的值。

144. 如何加密ORACLE的存储过程?
下列存储过程内容放在AA.SQL文件中
create or replace procedure testCCB(i in number) as
begin
dbms_output.put_line('输入参数是'||to_char(i));
end;

SQL>wrap iname=a.sql;
PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27 22:26:48 2001
Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved.
Processing AA.sql to AA.plb
运行AA.plb
SQL> @AA.plb ;

145. 如何监控事例的等待?
select event,sum(decode(wait_Time,0,0,1)) "Prev",
sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"
from v$session_Wait
group by event order by 4;

146. 如何回滚段的争用情况?
select name, waits, gets, waits/gets "Ratio"
from v$rollstat C, v$rollname D
where C.usn = D.usn;

147. 如何监控表空间的 I/O 比例?
select B.tablespace_name name,B.file_name "file",A.phyrds pyr,
A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw
from v$filestat A, dba_data_files B
where A.file# = B.file_id
order by B.tablespace_name;

148. 如何监控文件系统的 I/O 比例?
select substr(C.file#,1,2) "#", substr(C.name,1,30) "Name",
C.status, C.bytes, D.phyrds, D.phywrts
from v$datafile C, v$filestat D
where C.file# = D.file#;

149. 如何在某个用户下找所有的索引?
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;

150. 如何监控 SGA 的命中率?
select a.value + b.value "logical_reads", c.value "phys_reads",
round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"
from v$sysstat a, v$sysstat b, v$sysstat c
where a.statistic# = 38 and b.statistic# = 39
and c.statistic# = 40;

151. 如何监控 SGA 中字典缓冲区的命中率?
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets, getmisses;

152. 如何监控 SGA 中共享缓存区的命中率,应该小于1% ?
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(reloads)/sum(pins) *100 libcache
from v$librarycache;

select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent"
from v$librarycache;

153. 如何显示所有数据库对象的类别和大小?
select count(name) num_instances ,type ,sum(source_size) source_size ,
sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size,
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required
from dba_object_size
group by type order by 2;

154. 监控 SGA 中重做日志缓存区的命中率,应该小于1%
SELECT name, gets, misses, immediate_gets, immediate_misses,
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');

155. 监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size
SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');


156. 如何监控当前数据库谁在运行什么SQL语句?
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;

157. 如何监控字典缓冲区?
SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE;
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;
后者除以前者,此比率小于1%,接近0%为好。

SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES"
FROM V$ROWCACHE


158. 监控 MTS
select busy/(busy+idle) "shared servers busy" from v$dispatcher;
此值大于0.5时,参数需加大
select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher';
select count(*) from v$dispatcher;
select servers_highwater from v$mts;
servers_highwater接近mts_max_servers时,参数需加大

159. 如何知道当前用户的ID号?
SQL>SHOW USER;
OR
SQL>select user from dual;

160. 如何查看碎片程度高的表?
SELECT segment_name table_name , COUNT(*) extents
FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);

162. 如何知道表在表空间中的存储情况?
select segment_name,sum(bytes),count(*) ext_quan from dba_extents where
tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;

163. 如何知道索引在表空间中的存储情况?
select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner'
group by segment_name;

164、如何知道使用CPU多的用户session?
11是cpu used by this session

select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by value desc;

165. 如何知道监听器日志文件?
以8I为例
$ORACLE_HOME/NETWORK/LOG/LISTENER.LOG

166. 如何知道监听器参数文件?
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/LISTENER.ORA

167. 如何知道TNS 连接文件?
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/TNSNAMES.ORA

168. 如何知道Sql*Net 环境文件?
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/SQLNET.ORA

169. 如何知道警告日志文件?
以8I为例
$ORACLE_HOME/ADMIN/SID/BDUMP/SIDALRT.LOG

170. 如何知道基本结构?
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/STANDARD.SQL

171. 如何知道建立数据字典视图?
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL

172. 如何知道建立审计用数据字典视图?
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATAUDIT.SQL

173. 如何知道建立快照用数据字典视图?
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATSNAP.SQL

本讲主要讲的是SQL语句的优化方法! 主要基于ORACLE9I的.
174. /*+ALL_ROWS*/
表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.
例如:
SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';

175. /*+FIRST_ROWS*/
表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.
例如:
SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';

176. /*+CHOOSE*/
表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;
表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;
例如:
SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';

177. /*+RULE*/
表明对语句块选择基于规则的优化方法.
例如:
SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';

178. /*+FULL(TABLE)*/
表明对表选择全局扫描的方法.
例如:
SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='CCBZZP';

179. /*+ROWID(TABLE)*/
提示明确表明对指定表根据ROWID进行访问.
例如:
SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'
AND EMP_NO='CCBZZP';

180. /*+CLUSTER(TABLE)*/
提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.
例如:
SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS
WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

181. /*+INDEX(TABLE INDEX_NAME)*/
表明对表选择索引的扫描方法.
例如:
SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M';

182. /*+INDEX_ASC(TABLE INDEX_NAME)*/
表明对表选择索引升序的扫描方法.
例如:
SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='CCBZZP';

183. /*+INDEX_COMBINE*/
为指定表选择位图访问路经,如果INDEX_COMBINE中没有提供作为参数的索引,将选择出位图索引的
布尔组合方式.
例如:
SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIRE2003-10-17_BMI)*/ * FROM BSEMPMS
WHERE SAL<5000000 AND HIRE2003-10-17<SYS2003-10-17;

184. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
提示明确命令优化器使用索引作为访问路径.
例如:
SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIRE2003-10-17_BMI)*/ SAL,HIRE2003-10-17
FROM BSEMPMS WHERE SAL<60000;

185. /*+INDEX_DESC(TABLE INDEX_NAME)*/
表明对表选择索引降序的扫描方法.
例如:
SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='CCBZZP';

186. /*+INDEX_FFS(TABLE INDEX_NAME)*/
对指定的表执行快速全索引扫描,而不是全表扫描的办法.
例如:
SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';

187. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
提示明确进行执行规划的选择,将几个单列索引的扫描合起来.
例如:
SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='CCBZZP' AND DPT_NO='TDC306';

188. /*+USE_CONCAT*/
对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询.
例如:
SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

189. /*+NO_EXPAND*/
对于WHERE后面的OR 或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展.
例如:
SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

190. /*+NOWRITE*/
禁止对查询块的查询重写操作.

191. /*+REWRITE*/
可以将视图作为参数.

192. /*+MERGE(TABLE)*/
能够对视图的各个查询进行相应的合并.
例如:
SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
AND A.SAL>V.AVG_SAL;

193. /*+NO_MERGE(TABLE)*/
对于有可合并的视图不再合并.
例如:
SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
AND A.SAL>V.AVG_SAL;

194. /*+ORDERED*/
根据表出现在FROM中的顺序,ORDERED使ORACLE依此顺序对其连接.
例如:
SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C
WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;

195. /*+USE_NL(TABLE)*/
将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.
例如:
SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

196. /*+USE_MERGE(TABLE)*/
将指定的表与其它行源通过合并排序连接方式连接起来.
例如:
SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE
BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

197. /*+USE_HASH(TABLE)*/
将指定的表与其它行源通过哈希连接方式连接起来.
例如:
SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE
BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

198. /*+DRIVING_SITE(TABLE)*/
强制与ORACLE所选择的位置不同的表进行查询执行.
例如:
SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;

199. /*+LEADING(TABLE)*/
将指定的表作为连接次序中的首表.

200. /*+CACHE(TABLE)*/
当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端
例如:
SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

201. /*+NOCACHE(TABLE)*/
当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端
例如:
SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

202. /*+APPEND*/
直接插入到表的最后,可以提高速度.
insert /*+append*/ into test1 select * from test4 ;
203. /*+NOAPPEND*/
通过在插入语句生存期内停止并行模式来启动常规插入.

insert /*+noappend*/ into test1 select * from test4 ;


ORACLE内部函数篇
204. 如何得到字符串的第一个字符的ASCII值?
ASCII(CHAR)
SELECT ASCII('ABCDE') FROM DUAL;
结果: 65

205. 如何得到数值N指定的字符?
CHR(N)
SELECT CHR(68) FROM DUAL;
结果: D

206. 如何连接两个字符串?
CONCAT(CHAR1,CHAR2)
SELECT CONCAT('ABC','DEFGH') FROM DUAL;
结果: 'ABCDEFGH'

207. 如何将列中的数值代替为字符串?
DECODE(CHAR,N1,CHAR1,N2,CHAR2...)
SELECT DECODE(DAY,1,'SUN',2,'MON') FROM DUAL;

208. INITCAP(CHAR)
将字符串CHAR的第一个字符为大写,其余为小写.
SELECT INITCAP('ABCDE') FROM DUAL;

209. LENGTH(CHAR)
取一字符串CHAR的长度.
SELECT LENGTH('ABCDE') FROM DUAL;

210. LOWER(CHAR)
将字符串CHAR全部变为小写.
SELECT LOWER('ABCDE') FROM DUAL;

211. LPAD(CHAR1,N,CHAR2)
用字符串CHAR2包括的字符左填CHAR1,使其长度为N.
SELECT LPAD('ABCDEFG',10,'123') FROM DUAL;
结果: '123ABCDEFG'

212. LTRIM(CHAR,SET)
从字符串CHAR的左边移去字符串SET中的字符,直到第一个不是SET中的字符为止.
SELECT LTRIM('CDEFG','CD') FROM DUAL;
结果: 'EFG'

213. NLS_INITCAP(CHAR)
取字符CHAR的第一个字符大写,其余字符为小写.
SELECT NLS_INITCAP('ABCDE') FROM DUAL;

214. NLS_LOWER(CHAR)
将字符串CHAR包括的字符全部小写.
SELECT NLS_LOWER('AAAA') FROM DUAL;

215. NLS_UPPER(CHAR)
将字符串CHAR包括的字符全部大写.
SELECT NLS_UPPER('AAAA') FROM DUAL;

216. REPLACE(CHAR1,CHAR2,CHAR3)
用字符串CHAR3代替每一个列值为CHAR2的列,其结果放在CHAR1中.
SELECT REPLACE(EMP_NO,'123','456') FROM DUAL;

217. RPAD(CHAR1,N,CHAR2)
用字符串CHAR2右填字符串CHAR1,使其长度为N.
SELECT RPAD('234',8,'0') FROM DUAL;

218. RTRIM(CHAR,SET)
移去字符串CHAR右边的字符串SET中的字符,直到最后一个不是SET中的字符为止.
SELECT RTRIM('ABCDE','DE') FROM DUAL;

219. SUBSTR(CHAR,M,N)
得到字符串CHAR从M处开始的N个字符. 双字节字符,一个汉字为一个字符的.
SELECT SUBSTR('ABCDE',2,3) FROM DUAL;

220. SUBSTRB(CHAR,M,N)
得到字符串CHAR从M处开始的N个字符. 双字节字符,一个汉字为二个字符的.
SELECT SUBSTRB('ABCDE',2,3) FROM DUAL;

221. TRANSLATE(CHAR1,CHAR2,CHAR3)
将CHAR1中的CHAR2的部分用CHAR3代替.
SELECT TRANSLATE('ABCDEFGH','DE','MN') FROM DUAL;

222. UPPER(CHAR)
将字符串CHAR全部为大写.

223. ADD_MONTHS(D,N)
将N个月增加到D日期.
SELECT ADD_MONTHS(SYS2003-10-17,5) FROM DUAL;

224. LAST_DAY(D)
得到包含D日期的月份的最后的一天的日期.
SELECT LAST_DAY(SYS2003-10-17) FROM DUAL;

225. MONTH_BETWEEN(D1,D2)
得到两个日期之间的月数.
SELECT MONTH_BETWEEN(D1,D2) FROM DUAL;

226. NEXT_DAY(D,CHAR)
得到比日期D晚的由CHAR命名的第一个周日的日期.
SELECT NEXT_DAY(TO_2003-10-17('2003/09/20'),'SATDAY') FROM DUAL;

227. ROUNT(D,FMT)
得到按指定的模式FMT舍入到的最进的日期.
SELECT ROUNT('2003/09/20',MONTH) FROM DUAL;

228. SYS2003-10-17
得到当前系统的日期和时间.
SELECT SYS2003-10-17 FROM DUAL;

229. TO_CHAR(D,FMT)
将日期D转换为FMT的字符串.
SELECT TO_CHAR(SYS2003-10-17,'YYYY/MM/DD') FROM DUAL;

230. TO_2003-10-17(CHAR,FMT)
将字符串CHAR按FMT的格式转换为日期.
SELECT TO_2003-10-17('2003/09/20','YYYY/MM/DD') FROM DUAL;

231. ABS(N)
得到N的绝对值.
SELECT ABS(-6) FROM DUAL;

232. CEIL(N)
得到大于或等于N的最大整数.
SELECT CEIL(5.6) FROM DUAL;

233. COS(N)
得到N的余弦值.
SELECT COS(1) FROM DUAL;

234. SIN(N)
得到N的正弦值.
SELECT SIN(1) FROM DUAL;

235. COSH(N)
得到N的双曲余弦值.
SELECT COSH(1) FROM DUAL;

236. EXP(N)
得到N的E的N次幂.
SELECT EXP(1) FROM DUAL;

237. FLOOR(N)
得到小于或等于N的最小整数.
SELECT FLOOR(5.6) FROM DUAL;

238. LN(N)
得到N的自然对数.
SELECT LN(1) FROM DUAL;

239. LOG(M,N)
得到以M为底N的对数.
SELECT LOG(2,8) FROM DUAL;

240. MOD(M,N)
得到M除以N的余数.
SELECT MOD(100,7) FROM DUAL;

241. POWER(M,N)
得到M的N幂.
SELECT POWER(4,3) FROM DUAL;

242. ROUND(N,M)
将N舍入到小数点后M位.
SELECT (78.87653,2) FROM DUAL;

243. SIGN(N)
当N<0时,得到-1;
当N>0时,得到1;
当N=0时,得到0;
SELECT SIGN(99) FROM DUAL;

244. SINH(N)
得到N的双曲正弦值.
SELECT SINH(1) FROM DUAL;

245. SORT(N)
得到N的平方根,N>=0
SELECT SORT(9) FROM DUAL;

246. TAN(N)
得到N的正切值.
SELECT TAN(0) FROM DUAL;

247. TANH(N)
得到N的双曲正切值.
SELECT TANH(0) FROM DUAL;

248. TRUNC(N,M)
得到在M位截断的N的值.
SELECT TRUNC(7.7788,2) FROM DUAL;

249. COUNT()
计算满足条件的记录数.
SELECT COUNT(*) FROM TABLE1 WHERE COL1='AAA';

250. MAX()
对指定的列求最大值.
SELECT MAX(COL1) FROM TABLE1;

251. MIN()
对指定的列求最小值.
SELECT MIN(COL1) FROM TABLE1;

252. AVG()
对指定的列求平均值.
SELECT AVG(COL1) FROM TABLE1;

253. SUM()
计算列的和.
SELECT SUM(COL1) FROM DUAL;

254. TO_NUMBER(CHAR)
将字符转换为数值.
SELECT TO_NUMBER('999') FROM DUAL;

ORACLE内部函数篇
255. CHARTOROWID(CHAR)
将包含外部语法ROWID的CHAR或VARCHAR2数值转换为内部的二进制语法,参数CHAR必须是包含外部语法的ROWID的18字符的字符串.
SELECT NAME FROM BSEMPMS WHERE ROWID=CHARTOROWID('AAAAfZAABAAACp8AAO');
NAME : LEIXUE

256. CONVERT(CHAR,DEST_CHAR_SET,SOURCE_CHAR_SET)
CONVERT将字符串CHAR中的字符从SOURCE_CHAR_SET标识的字符集转换为由DEST_CHAR_SET标识的字符集

SELECT CONVERT('GroB','US7ASCII','WE8HP') 'CONVERSION' FROM PUBS;
CONVERSION: Gross

257. HEXTORAW(CHAR)
将包含十六进制的CHAR转换为一个RAW数值.
INSERT INTO BSEMPMS(RAW_COLUMN) SELECT HEXTORAW('7D') FROM TEST;

258. RAWTOHEX(RAW)
将RAW数值转换为一个包含十六进制的CHAR值.
SELECT RAWTOHEX(RAW_COLUMN) 'CONVERSION' FROM BSEMPMS;
CONVERSION: 7D

259. ROWIDTOCHAR(ROWID)
将一个ROWID数值转换为VARCHAR2数据类型.
SELECT ROWID FROM BSEMPMS WHERE ROWIDTOCHAR(ROWID) LIKE '%BR1AAB%';

260. TO_MULTI_BYTE(CHAR)
将CHAR中的单字节转换为等价的多字节字符.
SELECT TO_MULTI_BYTE('ASFDFD') FROM TEST;

261. TO_SINGLE_BYTE(CHAR)
将CHAR中的多字节转换为等价的单字节字符.
SELECT TO_SINGLE_BYTE('ASFDFD') FROM TEST;

262. TRANSLATE USING(TEXT USING {CHAR_CS|NCHAR_CS})
将文本TEXT按照指定的转换方式转换成数据库字符集和民族字符集.
其中TEXT是待转换的.
USING CHAR_CS参数转换TEXT为数据库字符集,输出数据类型是VARCHAR2.
USING NCHAR_CS参数转换TEXT为数据库字符集,输出数据类型是NVARCHAR2.
CREATE TABLE TEST(CHAR_COL CHAR(20),NCHAR_COL NCHAR(20));
INSERT INTO TEST VALUES('HI,N'BYE');
SELECT * FROM TEST;

263. DUMP(EXPR,RETURN_FORMAT,START_POSITION,LENGTH)
返回一个包含数据类型代码,字节长度等内部表示信息的VARCHAR2值.返回结果是当前数据库字符集,数据类型按照下面规定的内部数据类型的编码作为一个数字进行返回:
代码 数据类型
0 VARCHAR2
1 NUMBER
8 LONG
12 2003-10-17
23 RAW
24 LONG RAW
69 ROWID
96 CHAR
106 MSSLABEL
参数RETUEN_FORMAT指定按照下面的基数表示返回的数值.
RETURN_FORMAT RESULT
8 8进制
10 10进制
16 16进制
17 单字符表示
如果参数RETURN_FORMAT没有指定,则按十进制表示返回.
如果参数START_POSITION和LENGTH被指定,则从START_POSITION开始的长为LENGTH的字节将被返回,缺省是返回整数表示.
SELECT DUMP('ABC',1016) FROM TEST;
select dump(ename,8,3,2) 'example' from emp where name='ccbzzp';

264. empty_b|clob()
返回一个空的LOB定位符,用在初始化LOB变量,或用在INSERT及UP2003-10-17声明去初始化LOB列或将其属性置为空.
INSERT INTO TABLE1 VALUES(EMPTY_BLOB());
UP2003-10-17 TABLE1 SET CLOB_COL=EMPTY_BLOB();

265. BFILENAME('DIRECTORY','FILENAME')
返回一个BFILE定位符,相关的二进制LOB物理文件在服务器的文件系统上.目录DIRECTORY是指在服务器的文件系统上实际搜索路径全名的别名. FILENAME是指服务器的文件系统的文件名.
INSERT INTO FILE_TAB VALUES(BFILENAME('LOB_DIR','IMAGE1.GIF'));

266. GREATEST(EXPR,EXPR,...)
GREATEST返回参数的最大值.
SELECT GREATEST('HARRY','HARRIOT','HAROLD') 'SAMPLE' FROM TABLE1;

267. LEAST(EXPR,EXPR,...)
LEAST返回参数的最小值.
SELECT LEAST('HARRY','HARRIOT','HAROLD') 'SAMPLE' FROM TABLE1;

268. NLS_CHARSET_DECL_LEN(BYTECNT,CSID)
返回一个NCHAR列的宽度.
SELECT NLS_CHARSET_DECL_LEN(200,NLS_CHARSET_ID('JA16EEFDFDF')) FROM TABLE1;

269. NLS_CHARSET_ID(TEXT)
返回相应于NLS字符集名字的NLS字符集ID数.
SELECT NLS_CHARSET_D('JADFDFFDF') FROM TABLE1;

270. NLS_CHARSET_NAME(N)
返回相应于ID数N的NLS字符集名称.
SELECT NLS_CHARSET_NAME(2) FROM TABLE1;

271. NVL(EXPR1,EXPR2)
若EXPR1是NULL,则返回EXPR2,否则返回EXPR1.
SELECT NAME,NVL(TO_CHAR(COMM),'NOT APPLICATION') FROM TABLE1;

272. UID
返回唯一标识当前数据库用户的整数.
SELECT UID FROM TABLE1;

273. USER
用VARCHAR2数据类型返回当前ORACLE用户的名称.
SELECT USER,UID FROM TABLE1;

274. USERENV(OPTION)
返回当前的会话信息.
OPTION='ISDBA'若当前是DBA角色,则为TRUE,否则FALSE.
OPTION='LANGUAGE'返回数据库的字符集.
OPTION='SESSIONID'为当前会话标识符.
OPTION='ENTRYID'返回可审计的会话标识符.
OPTION='LANG'返回会话语言名称的ISO简记.
OPTION='INSTANCE'返回当前的实例.
SELECT USERENV('LANGUAGE') FROM DUAL;

275. VSIZE(EXPR)
返回EXPR内部表示的字节数.
SELECT NAME,VSIZE(NAME) FROM TABLE1;

276. DEREF(E)
返回参数E的对象引用.
SELECT DEREF(C2) FROM TABLE1;

277. REFTOHEX(R)
将参数R转换为16进制.
SELECT REFTOHEX(C2) FROM TABLE1;

278. MAKE_REF(TABLE,KEY,KEY...)
通过把给定的键作为主键来创建给定视图对象中一行的引用.
CREATE TYPE T1 AS OBJECT(A NUMBER,B NUMBER);
CREATE TABLE TB1(C1 NUMBER,C2 NUMBER,PRIMARY KEY(C1,C2));
CREATE VIEW V1 OF T1 WITH OBJECT OID(A,B) AS SELECT * FROM TB1;
SELECT MAKE_REF(V1,1,3) FROM PUBS;

279. STDDEV(DISTINCT|ALL X)
STDDEV给出一组行值的标准差.
SELECT STDDEV(SALARY) AS EXAMPLE FROM EMPLOYEE;

280. VARIANCE(DISTINCT|ALL X)
VARIANCE返回一组行中所有VALUE的方差.
SELECT VARIANCE(SALARY) AS EXAMPLE FROM EMPLOYEE;

阅读更多
上一篇Oracle学习总结
下一篇ORACLE函数大全
想对作者说点什么? 我来说一句

oracle傻瓜问题一千问

2009年01月20日 32KB 下载

oracle常用傻瓜问题1000问

2010年03月30日 129KB 下载

Oracle常用傻瓜问题1000问

2010年07月20日 91KB 下载

oracle傻瓜1000问.pdf

2007年08月21日 253KB 下载

oracle傻瓜1000问

2011年07月07日 1.54MB 下载

Oracle傻瓜1000问.chm

2011年01月13日 88KB 下载

oracle傻瓜问题1000问

2008年04月14日 338KB 下载

ORACLE 应用常见傻瓜问题 1000 问

2012年05月23日 595KB 下载

Oracle常用傻瓜问题1000问.chm

2011年02月12日 82KB 下载

没有更多推荐了,返回首页

关闭
关闭