设为首页 收藏本站
查看: 538|回复: 0

[经验分享] oracle SQL葵花宝典(续写中)

[复制链接]

尚未签到

发表于 2016-7-25 09:27:39 | 显示全部楼层 |阅读模式
查询某列重复的数据
select * from Flyz_People where People_Name in (select   People_Name from   Flyz_People group by   People_Name having count (People_Name) > 1)
删除用户下面的所有表结构:
select   'Drop   table   '||table_name||';'     
from   all_tables   
where   owner='SF_UNITE';  
2011-07-12: 修改多表结构中相同字段的字段


CREATE OR REPLACE procedure ABLEMMS.update_table
is
v_length NUMBER;
sqls varchar2(4000);
table_name varchar2(4000);
b varchar2(4000);
c varchar2(4000);
d int;
cursor cur is select u.table_name, t.DATA_TYPE,t.COLUMN_NAME, t.DATA_LENGTH from user_tables u, user_tab_columns t where
u.table_name = t.TABLE_NAME  and t.TABLE_NAME = 'QF_KEYWORDS';
begin
open cur;
LOOP
FETCH cur INTO table_name,b,c,d;
EXIT WHEN cur%NOTFOUND;
if b = 'VARCHAR2' THEN
v_length := d+10;            
sqls :='alter table ' || table_name ||' modify ' || c || ' VARCHAR2('||v_length||')';
EXECUTE IMMEDIATE  sqls;
END IF;   
END LOOP;
close cur;
end update_table;
2011-04-25: 删除用户下所有的表结构
create or replace
PROCEDURE "del_table"
IS
cursor cur1 is select table_name from user_tables;
begin
for cur2 in cur1 loop
execute immediate 'drop table '||cur2.table_name||'cascade constraints';
end loop;
end;
2011-04-14:oracle查询被锁死的表以及解锁
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
查询SID在执行的sql:
select sql_text from v$session a,v$sqltext_with_newlines b
where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
and a.sid in (&sid,&serial) order by piece;

alter system kill session '&sid,&SERIAL';


2011-03-25:oralce分页查询SQL语句
select * from ABLEPHOTO where rowid in(select rid from (select rownum rn,rid from(select rowid rid,ATIME from
ABLEPHOTO order by ATIME desc) where rownum<50) where rn>30) order by ATIME desc
ATIME 是表ABLEPHOTO 中的字段也是根据这个字段排序的
1、去掉重复记录 保留一条
DELETE FROM A_TEST
WHERE UNAME IN (  SELECT UNAME
FROM A_TEST
GROUP BY UNAME
HAVING COUNT(UNAME) > 1    )
AND ROWID NOT IN ( SELECT MIN(ROWID)
FROM A_TEST
GROUP BY UNAME
HAVING COUNT(UNAME) > 1   )
2、替换字段根据指定的字符
update QF_KEYWORDS set KEYWORD=REPLACE(KEYWORD, ',' , '')
3、oracle job时间


每天运行一次 'SYSDATE + 1'
每小时运行一次 'SYSDATE + 1/24'
每10分钟运行一次 'SYSDATE + 10/(60*24)'
每30秒运行一次 'SYSDATE + 30/(60*24*60)'
每隔一星期运行一次 'SYSDATE + 7'

每天午夜12点 'TRUNC(SYSDATE + 1)'
每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
每天凌晨0点执行
TRUNC(sysdate+1)
每天凌晨1点执行
TRUNC(sysdate+1)+1/24
每天早上8点30分执行
TRUNC(SYSDATE+1)+(8*60+30)/(24*60)
3、每周定时执行
例如:
每周一凌晨2点执行
TRUNC(next_day(sysdate,1))+2/24
TRUNC(next_day(sysdate,'星期一'))+2/24
每周二中午12点执行
TRUNC(next_day(sysdate,2))+12/24
TRUNC(next_day(sysdate,'星期二'))+12/24
4、每月定时执行
例如:
每月1日凌晨0点执行
TRUNC(LAST_DAY(SYSDATE)+1)
每月1日凌晨1点执行
TRUNC(LAST_DAY(SYSDATE)+1)+1/24
5、每季度定时执行
每季度的第一天凌晨0点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'q')
每季度的第一天凌晨2点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24
每季度的最后一天的晚上11点执行
TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24
6、每半年定时执行
例如:
每年7月1日和1月1日凌晨1点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24
7、每年定时执行
例如:
每年1月1日凌晨2点执行
ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24
根据规律来算,其实就非常简单了。
8、每月的第一天跟最后一天
oracle 获取 每月第一天 最后一天
博客分类: oracle
Oracle
方法一:
select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天",to_char(last_day(sysdate), 'yyyy-mm-dd') "本月最后一天" from dual;
方法二:
select trunc(sysdate, 'MONTH') 本月第一天,to_date(to_char(last_day(sysdate),'YYYY-MM-DD'),'YYYY-MM-DD') 本月最后一天 from dual;
方法三:
select trunc(sysdate, 'MONTH') 本月第一天,to_char(last_day(sysdate), 'YYYY-MM-DD') 本月最后一天 from dual;
4、oracle查询表名:
select table_name from all_tables t where table_name like '%SEND%'
当库中的表中太多太多的时候,可以查询所有库中的表名
select table_name from user_tables
查询用户下面的表

5、创建索引:
CREATE INDEX "IPIQXT"."TZHS10_SUBMIT" ON "IPIQXT"."TZHS10_SUBMIT"
(
"ID"
)
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS STORAGE
(
INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
)
TABLESPACE "MBOP" ;
6、创建job:
--两种方法 三十分钟执行一次存储过程DAYBAKDATA
1、VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno, 'DAYBAKDATA;', sysdate , 'SYSDATE+30/1440');
commit;
END;
2、DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job       => X
,what      => 'DAYBAKDATA;'
,next_date => SYSDATE+30/1440
,interval  => 'SYSDATE+30/1440'
,no_parse  => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
7、打印
dbms_output.put_line('归档了一条彩信发送状态');
8、创建索引:
CREATE INDEX "MY_SUBMIT4" ON "MY_SUBMIT4"
(
"ID"
)

10、创建触发器
create or replace
TRIGGER bjcbsend
AFTER INSERT ON a_SUBMIT
FOR EACH ROW
DECLARE
BEGIN

--sql操作 以上是插入数据时候的触发器 以下注释的是如果你想要修改某个字段的时候的触发器 只需把INSERT改成UPDATE  然后加上以下代码
--  if updating('字段') and :NEW.字段> '100'  then
--       执行sql操作
-- end if;
--END;
9、创建序列
CREATE SEQUENCE "IPIQXT"."SEQ_ABLEPHOTO"
MINVALUE 1 MAXVALUE 9999999999999999999999999999
INCREMENT BY 1 START WITH 20000 CACHE 20 NOORDER NOCYCLE ;
10、创建函数
--从表T_a 中取出phone 条件是AREANO =传入的参数areano1
create or replace
function vphone (areano1 in varchar2)
return varchar2
is
phone1 varchar2(20);
begin
select phone into phone1 from T_a where rownum=1 and AREANO = areano1 and flag
return(phone1);
end ;
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248977-1-1.html 上篇帖子: Oracle数据库管理员职责(一) 下篇帖子: 如何加速Oracle大批量数据处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表