![](https://csdnimg.cn/release/download_crawler_static/31606548/bg4.jpg)
这样只做一遍表扫描
这是分了 20 以下和 50 以上的
类似的问题,自己扩展了
添加行号:
select (select count(*) from a1 where item <= a.item) AS ROW , * FROM a1 as
a order by item
select * from table1 a
where id in (select top 3 from table1 where 物品 =a. 物品 order by price desc)
每一种物品有很多价格,每一种物品选择排在前三的纪录
1 。job 的使用:
DBMS_JOB.SUBMIT(:jobno,//job 号
'your_procedure;',// 要执行的过程
trunc(sysdate)+1/24,// 下次执行时间
'trunc(sysdate)+1/24+1'// 每次间隔时间
);
删除 job:dbms_job.remove(jobno);
修改要执行的操作 :job:dbms_job.what(jobno,what);
修改下次执行时间: dbms_job.next_date(job,next_date);
修改间隔时间: dbms_job.interval(job,interval);
停止 job:dbms.broken(job,broken,nextdate);
启动 job:dbms_job.run(jobno);
例子:
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;',//Procdemo 为过程名称
SYSDATE, 'SYSDATE + 1/720');
commit;
end;
/
2 。把一个表放在内存里
alter table tablename cache.
3 。创建临时表
CREATE GLOBAL TEMPORARY TABLE TABLENAME (
COL1 VARCHAR2(10),
COL2 NUMBER
) ON COMMIT PRESERVE(DELETE) ROWS ;
这种临时表不占用表空间,而且不同的 SESSION 之间互相看不到对方的数据
在会话结束后表中的数据自动清空,如果选了 DELETE ROWS ,则在提交的时候即清