计算本星期的起始结束日期
--得到星期一的日期
select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+2 from dual;
--得到星期天的日期
select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+8 from dual;
使用explain plan分析sql;
使用如下的两个命令显示查询执行的路径:
set autotrace on 命令
explain plan 命令
set autotrace on 命令返回查询数据,显示sql执行路径;
explain plan 显示sql执行路径,不执行查询操作,可见,explain plan更具实用性;
下面是我的操作记录
登录
sqlplus dev/chenli@testdb ;
执行
set autotrace on;
提示错误信息:
SP2-0613: Unable to verify PLAN_TABLE format or existence
SP2-0611: Error enabling EXPLAIN report
错误信息告诉我们,没有plan_table,由于plan_table表结构在不同版本的oracle下会有所不同,所以不要随便创建这个表,在oracle的安装路径下面,提供了创建plan_table表的sql脚本,该sql脚本文件的路径是:$ORACLE_HOME/rdbms/admin/utlxplan.sql
在sqlplusq模式下,执行如下命令,创建plan_table
@$ORACLE_HOME/rdbms/admin/utlxplan.sql
返回
Table created.
也可以把这个文件中的建表sql拷贝出来,到plsqldever中执行,创建plan_table表;
sqlplus模式下,再次执行set autotrace on;
没有错误信息返回;
这时再执行sql语句,就会在返回结果后面,显示sql执行路径,和分析结果;
用explain plan;不先运行查询sql的情况下,生成查询的执行路径;
命令格式如下:
explain plan
for
sql;
查看组合分区建表脚本
在plsqldever中,只能看到组合分区表的表结构,看不到建表脚本,为了查看建表脚本,可以通过一个oracle自带的程序包来完成,具体操作sql如下:
SELECT DBMS_METADATA.GET_DDL(''TABLE'',''TABLE_NAME'',''USER_NAME'') FROM DUAL;
在上面的参数中,TABLE_NAME是被查询的表的名字,USER_NAME表归属的用户名字.
如果如上格式填写正确的参数,执行sql,就可以抓去到组合分区表的建表脚本.
如果执行如上sql的时候,出现如下错误:
ORA-31603: object "CP_EXT_PKGINFO_HIS_T" of type TABLE not found in schema
"SCHEMA"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA_INT", line 3209
ORA-06512: at "SYS.DBMS_METADATA_INT", line 3594
ORA-06512: at "SYS.DBMS_METADATA_INT", line 4483
ORA-06512: at "SYS.DBMS_METADATA", line 326
ORA-06512: at "SYS.DBMS_METADATA", line 410
ORA-06512: at "SYS.DBMS_METADATA", line 449
ORA-06512: at "SYS.DBMS_METADATA", line 615
ORA-06512: at "SYS.DBMS_METADATA", line 1221
ORA-06512: at line 1
那么,请检查传入的三个参数,最应该注意的是最后一个参数,他是一个数据库用户名;有些参考书上将上面描述成SELECT DBMS_METADATA.GET_DDL(''TABLE'',''TABLE_NAME'',''SCHEMA'') FROM DUAL;
其实SCHEMA在oracle中就是一个oracle用户
取消日志记录,提高性能
在海量插入数据和创建表的时候,不记录日志比记录日志在性能上有很大的提高,使用方法
insert into table_a nologging select * from table_b;
create table_a nologging as select * from table_b;