最近遇到在windows 2008下IE其它的网页都可以访问,唯有oracle.com不能访问,真郁闷了,后来找一代理,访问速度还可以,配置如下:
这个代理第一次访问的话,需要跳到他的主页,过个十几秒中就可以跳转到Oracle的官方网站了。
——————————————————————————————————
132.239.17.224 端口:3128
不能访问的原来至今不明,难道是RBWT??! ......
如何看懂ORACLE执行计划
一、什么是执行计划
An explain plan is a representation of the access path that is taken when a query is executed within Oracle.
二、如何访问数据
At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle block, the largest is constrained by operating system limits (and multiblock i/o). Logically Oracle finds the data to read by using the following methods:
Full Table Scan (FTS) --全表扫描
Index Lookup (unique & non-unique) --索引扫描(唯一和非唯一)
Rowid --物理行id
三、执行计划层次关系
When looking at a plan, the rightmost (ie most inndented) uppermost operation is the first thing that is executed. --采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行
1.一个简单的例子:
SQL> select /*+parallel (e 4)*/ * from emp e;
Execution Plan
----------------------------------------------------------
&n ......
查看所有表空间使用情况
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
2),
'990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
from (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MA ......
1,列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数。
select job,count(empno) from emp
where job in(select job from emp group by job having min(sal)>1500)
group by job;
2,列出薪金高于公司平均薪金的所有员工所在部门,上级领导,公司的工资等级。
select e.ename,d.dname,m.ename,e.sal,sa.grade
from emp e,emp m,dept d,(select avg(sal) avg from emp) ed,salgrade sa
where e.mgr=m.empno(+) and e.deptno=d.deptno and e.sal >ed.avg and (e.sal between losal and hisal);
3,列出与scott从事相同工作的所有员工及部门名称。
select e.ename,d.dname from emp e,dept d,(select job from emp where ename='SCOTT') ed
where e.job=ed.job and e.deptno=d.deptno and ename!='SCOTT';
4,列出所有部门的详细信息和部门人数。
select d.*,nvl(ed.cou,0)
from dept d,(select deptno,count(empno) cou from emp group by deptno) ed
where d.deptno=ed.deptno(+);
5,列出各种工作的最低工资及从事此工作的雇员姓名(未能将相同工资的人排除)。
select e.ename,e.job,e.sal
from emp e,(select min(sal) min from emp group ......
(1 ) 注意增加约束时的写法,和ORACLE 略有不同
Oracle :
ALTER TABLE SCHEMA.PREFIX_INFO ADD (
CONSTRAINT PK_PREFIX_INFO PRIMARY KEY (INFO_ID));
PostgresQL :
alter table schema.prefix_info add constraint prefix_info_pkey primary key(info_id);
(2 )系统默认的最大值与ORACLE 不同
Oracle :
CREATE SEQUENCE PREFIX_INFO_SEQUENCE
INCREMENT BY 1
START WITH 582
MINVALUE 1
MAXVALUE 9999999999999999999999999999
NOCYCLE
CACHE 20
NOORDER;
PostgresQL :
CREATE SEQUENCE schema.prefix_info_sequence
increment 1
minvalue 1
maxvalue 9223372036854775807
start 582
cache 20;
(3 )PostgresQL 中的 || 用 法与其他数据库不同:
select a|| b from table1;
当a 或b 其中一个为null 时, 该查询返回null ,
(4 )PostgresQL 中没有concat 函数,且由于|| 用法的问题,无法使用|| 替换,解决 方法为在public schema 中创建函数concat
create or replace function concat(text, text)
returns text as
$body$select coalesce($1,'') || coalesce($2,'')$body$
language 'sql' volatile;
alter funct ......
创建表
create table person (pid int,name varchar2(20) unique,
age int check(age between 0 and 150),sex varchar(4) default '男',tp int,
address varchar(200),constraint person_pid_pk primary key(pid));
插入数据
insert into person values(0011,'刘三姐',25,'男',13930123021,'河北省曲阳县');
创建子表
create table book(bid int primary key not null,bname varchar2(20),bprice number(5,2),pid int,
constraint person_book_pid_fk foreign key(pid) references person(pid));
插入数据
insert into book values(0101,'简爱',7.85,0011);
增加部门50
select * from dept;
insert into dept values(50,'HR','HOUSTON');
在emp中插入新数据
insert into emp(empno,ename,job,sal,mgr,hiredate,comm,deptno)
values(8888,'张三','经理',9000,null,sysdate,null,50);
ROWNUM
查询前五个数据
select rownum,empno,ename,job,sal,hiredate
from emp where rownum<=5;
select * from
查询后五个数据
(select rownum rn,empno,ename,job,sal,hiredate from emp
where rownum <=10 ) temp
where temp.rn>5; ......