--1.批量生成sql語句(檢測表中主鍵字段作於是否含有空格)
select 'select * from ' || b.table_name || ' where ' ||'substr('||b.column_name||',0,1)='' '' ' || 'or substr('||b.column_name ||',length('||b.column_name||'),1)='' '''
from user_constraints a,user_cons_columns b
where a.CONSTRAINT_NAME = b.constraint_name
AND a.CONSTRAINT_TYPE = 'P'
AND b.constraint_name not like 'SYS%'
AND b.table_name IN (select TABLE_NAME from user_tables)
ORDER BY b.TABLE_NAME
--2.關於鎖表問題的解決:
select * from v$locked_object ;--查看被鎖定的數據,得到object_id在dba_objects中可以查看出來被鎖定的表
select * from dba_objects where object_id ='119689';--可以看出來哪個表被鎖住
select * from v$session where sid =371;--從v$locked_object得到sid
alter system kill session '371,274';--傳入sid和serial值
--3.修改
a.修改約束(先增後刪):
b.修改表中子段類型:
b1.alter table code_cwxxb modify hlks varchar2(4);--將表code_cwwxxb中hlks字段類型改爲:varchar2(4)
b2.修改char類型爲varchar類型(使用轉換的思想)--先改名,再添加,後賦值,最後刪除
alter table zy_cnext_hf rename column hlks to hlks_back
alter table zy_cnext_hf a a.hlks varchar2(4)
update zy_cnext_hf a set a.hlks=(select trim(b.hlks_back) from zy_cnext_hf b where a.rowid=b.rowid)
alter table zy_cnext_hf drop column hlks_back
--4.關於oracle中的系統表:注意(對於字段區分大小寫)
select * from user_tables --查出該登陸用戶系統中的所有表
select * from user_tab_columns-- 查出登陸用戶系統中所有表的列
select * from dba_tables --查詢系統中所有的表
--5.關於系統表的比對:
--1>.缺少的表
SELECT C.*
FROM (SELECT A.TABLE_NAME A_TABLE,
B.TABLE_NAME B_TABLE
FROM (SELECT TABLE_NAME
FROM Dba_Tables
WHERE OWNER = 'TPHIS_TH' --用標準庫代替
AND TABLE_NAME NOT LIKE ('STU%')
AND TABLE_NAME NOT LIKE ('T_CON%')
AND TABLE_NAME NOT LIKE ('KC%')
AND TABLE_NAME NOT LIKE ('WJDM%')
AND TABLE_NAME NOT LIKE ('CWTJ%')) A
LEFT JOIN
(SELECT TABLE_NAME
FROM Dba_Tables
WHERE OWNER = 'TPHIS_MC' --用被比較的庫代替
AND TABLE_NAME NOT LIKE ('STU%')
AND TABLE_NAME NOT LIKE ('T_CON%')
AND TABLE_NAME NOT LIKE ('KC%')
AND TABLE_NAME NOT LIKE ('WJDM%')
AND TABLE_NAME NOT LIKE ('CWTJ%')) B
ON A.TABLE_NAME = B.TABLE_NAME) C
WHERE C.B_TABLE IS NULL
ORDER BY C.A_TABLE
--2>.缺少的視圖或視圖的內容不一致
SELECT C.*
FROM (SELECT A.VIEW_NAME A_VIEW,
A.TEXT_LENGTH A_TEXT_LENGTH,
B.VIEW_NAME B_VIEW,
B.TEXT_LENGTH B_TEXT_LENGTH
FROM (SELECT VIEW_NAME,TEXT_LENGTH
FROM DBA_VIEWS
WHERE OWNER = 'TPHIS_TH' --用標準庫代替
) A
LEFT JOIN
(SELECT VIEW_NAME,TEXT_LENGTH
FROM DBA_VIEWS
WHERE OWNER = 'TPHIS_MC' --用被比較的庫代替
) B
ON A.VIEW_NAME = B.VIEW_NAME) C
WHERE C.B_VIEW IS NULL OR C.A_TEXT_LENGTH <> C.B_TEXT_LENGTH
ORDER BY C.A_VIEW
--3>.缺少字段或類型不同或長度不同
SELECT C.* --DISTINCT C.A_TABLE
FROM (SELECT A.TABLE_NAME AS A_TABLE,
A.COLUMN_NAME AS A_COL,
A.DATA_TYPE AS A_TPYE,
A.DATA_LENGTH AS A_LEN,
B.TABLE_NAME AS B_TABLE,
B.COLUMN_NAME AS B_COL,
B.DATA_TYPE AS B_TPYE,
B.DATA_LENGTH AS B_LEN
FROM (SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE,DATA_LENGTH
FROM Dba_Tab_Columns
WHERE OWNER = 'TPHIS_TH' --用標準庫代替
AND TABLE_NAME NOT LIKE ('STU%')
AND TABLE_NAME NOT LIKE ('T_CON%')
AND TABLE_NAME NOT LIKE ('KC%')
AND TABLE_NAME NOT LIKE ('WJDM%')
AND TABLE_NAME NOT LIKE ('CWTJ%')) A
LEFT JOIN
(SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE,DATA_LENGTH
FROM Dba_Tab_Columns
WHERE OWNER = 'TPHIS_MC' --用被比較的庫代替
AND TABLE_NAME NOT LIKE ('STU%')
AND TABLE_NAME NOT LIKE ('T_CON%')
AND TABLE_NAME NOT LIKE ('KC%')
AND TABLE_NAME NOT LIKE ('WJDM%')
AND TABLE_NAME NOT LIKE ('CWTJ%')) B
ON A.COLUMN_NAME = B.COLUMN_NAME
AND A.TABLE_NAME=B.TABLE_NAME ) C
WHERE C.B_COL IS NULL OR (C.A_TPYE<>C.B_TPYE OR C.A_LEN <> C.B_LEN )
ORDER BY C.A_TABLE,C.A_COL
--4>.表中缺少存儲
SELECT C.A_NAME, C.B_NAME
FROM (SELECT A.NAME A_NAME, B.NAME B_NAME
FROM (SELECT DISTINCT NAME
FROM DBA_SOURCE
WHERE OWNER = 'TPHIS_TH' --用標準庫代替
AND TYPE = 'PROCEDURE') A
LEFT JOIN
(SELECT DISTINCT NAME
FROM DBA_SOURCE
WHERE OWNER = 'TPHIS_MC' --用被比較的庫代替
AND TYPE = 'PROCEDURE') B
ON A.NAME = B.NAME) C
WHERE C.B_NAME IS NULL
ORDER BY C.A_NAME
--5>.表中缺少函數
SELECT C.A_NAME, C.B_NAME
FROM (SELECT A.NAME A_NAME, B.NAME B_NAME
FROM (SELECT DISTINCT NAME
FROM DBA_SOURCE
WHERE OWNER = 'TPHIS_TH' --用標準庫代替
AND TYPE = 'FUNCTION') A
LEFT JOIN
(SELECT DISTINCT NAME
FROM DBA_SOURCE
WHERE OWNER = 'TPHIS_MC' --用被比較的庫代替
AND TYPE = 'FUNCTION') B
ON A.NAME = B.NAME) C
WHERE C.B_NAME IS NULL
ORDER BY C.A_NAME
--6>表中存儲或函數內容不一樣
SELECT *
FROM (SELECT A.TYPE A_TYPE,
A.NAME A_NAME,
A.TEXT A_TEXT,
B.TEXT B_TEXT
FROM (SELECT TYPE,NAME, LINE, TEXT
FROM DBA_SOURCE
WHERE OWNER = 'TPHIS_DEV' --用標準庫代替
AND ((TYPE = 'PROCEDURE') OR (TYPE = 'FUNCTION') OR (TYPE = 'TRIGGER') OR (TYPE='PACKAGE'))) A
LEFT JOIN
(SELECT TYPE,NAME, LINE, TEXT
FROM DBA_SOURCE
WHERE OWNER = 'TPHIS_LN' --用被比較的庫代替
AND ((TYPE = 'PROCEDURE') OR (TYPE = 'FUNCTION') OR (TYPE = 'TRIGGER') OR (TYPE='PACKAGE'))) B
ON A.NAME = B.NAME AND length(replace(to_char(decode(A.TEXT,null,' ',A.TEXT)),' ',''))
=length(replace(to_char(decode(B.TEXT,null,' ',B.TEXT)),' ',''))) C
WHERE C.B_TEXT IS NULL
ORDER BY C.A_NAME,C.A_TEXT;
--7>表中缺少包
SELECT C.A_NAME, C.B_NAME
FROM (SELECT A.NAME A_NAME, B.NAME B_NAME
FROM (SELECT DISTINCT NAME
FROM DBA_SOURCE
WHERE OWNER = 'TPEMR_TH' --用標準庫代替
AND TYPE = 'PACKAGE') A
LEFT JOIN
(SELECT DISTINCT NAME
FROM DBA_SOURCE
WHERE OWNER = 'TPEMR_ZH0621' --用被比較的庫代替
AND TYPE = 'PACKAGE') B
ON A.NAME = B.NAME) C
WHERE C.B_NAME IS NULL
ORDER BY C.A_NAME
--6系統函數:
substr(bmdm,0,1)--從第一位開始截取一位
substr(bmdm,length(bmdm),1)--從最後一位開始截取一位
--7.爲表中特定的列添加說明
comment on column CODE_YPDM.CBBZ
is '0沒有拆包1已拆包'
--8.關於表之間缺少字段或類型不同或長度不同
SELECT C.* --DISTINCT C.A_TABLE
FROM (SELECT A.TABLE_NAME AS A_TABLE,
A.COLUMN_NAME AS A_COL,
A.DATA_TYPE AS A_TPYE,
A.DATA_LENGTH AS A_LEN,
B.TABLE_NAME AS B_TABLE,
B.COLUMN_NAME AS B_COL,
B.DATA_TYPE AS B_TPYE,
B.DATA_LENGTH AS B_LEN
FROM (SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE,DATA_LENGTH
FROM Dba_Tab_Columns
WHERE OWNER = 'TPEMR_DEV' --用標準庫代替
AND TABLE_NAME = ''
) A
LEFT JOIN
(SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE,DATA_LENGTH
FROM Dba_Tab_Columns
WHERE OWNER = 'TPEMR_DEV' --用被比較的庫代替
AND TABLE_NAME = ''
) B
ON A.COLUMN_NAME = B.COLUMN_NAME
AND A.TABLE_NAME=B.TABLE_NAME ) C
WHERE C.B_COL IS NULL OR (C.A_TPYE<>C.B_TPYE OR C.A_LEN <> C.B_LEN )
ORDER BY C.A_TABLE,C.A_COL;
--實際應用比對tpemr與tphis同名字典表
SELECT C.* --DISTINCT C.A_TABLE
FROM (SELECT A.TABLE_NAME AS A_TABLE,
A.COLUMN_NAME AS A_COL,
A.DATA_TYPE AS A_TPYE,
A.DATA_LENGTH AS A_LEN,
B.TABLE_NAME AS B_TABLE,
B.COLUMN_NAME AS B_COL,
B.DATA_TYPE AS B_TPYE,
B.DATA_LENGTH AS B_LEN
FROM (SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH
FROM Dba_Tab_Columns
WHERE OWNER = 'TPHIS_DEV' --用標準庫代替
AND TABLE_NAME in
(select table_name
from dba_tables
where owner = 'TPEMR_DEV'
and table_name like '%CODE%'
and table_name in
(select table_name
from dba_tables
where owner = 'TPHIS_DEV'
and table_name like '%CODE%'))) A
LEFT JOIN (SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH
FROM Dba_Tab_Columns
WHERE OWNER = 'TPEMR_DEV' --用被比較的庫代替
AND TABLE_NAME in
(select table_name
from dba_tables
where owner = 'TPEMR_DEV'
and table_name like '%CODE%'
and table_name in
(select table_name
from dba_tables
where owner = 'TPHIS_DEV'
and table_name like '%CODE%'))) B ON A.COLUMN_NAME =
B.COLUMN_NAME
AND A.TABLE_NAME =
B.TABLE_NAME) C
WHERE C.B_COL IS NULL
OR (C.A_TPYE <> C.B_TPYE OR C.A_LEN <> C.B_LEN)
ORDER BY C.A_TABLE, C.A_COL;
--9.關於數據庫完整性sql
--eg:code_ypdm<規格和計量單位存在對應不一致>
select 'code_ypdm' table_name,
ypdm||'(ypdm) '||ypmc||'(ypmc) '||dw||'(dw) '||jldw||'(jldw) '||gg||'(gg) '||jlbl||'(jlbl) ' Error_Field,
'在規格和劑量單位的處理上可能存在問題' Error_Explain
from (select case when substr(gg, 1, 2) = '0.'
then substr(gg, 2, length(to_char(jlbl)))
else
substr(gg, 1, length(to_char(jlbl)))
end as gg0,
to_char(jlbl) as jlbl0,length(to_char(jlbl)),
gg,jlbl,ypdm,dw,jldw,ypmc
from (select replace(gg,' ','') as gg,ypdm,dw,jlbl,jldw,ypmc from code_ypdm))
where gg0 <> jlbl0 and ypdm not in (select ypdm from code_ypdm where dw = jldw and jlbl = 1)
--10.修改統計報表中名稱字段長度
select 'alter table ' || table_name || ' modify ' || column_name || ' ' ||
data_type || '(' || data_length || ');'
from (select table_name,
column_name,
data_type,
(select data_length
from (select column_name, max(data_length) as data_length
from user_tab_columns
where table_name not like 'BIN%'
and column_name in
(select distinct column_name
from user_tab_columns
where table_name in (select table_name from user_tables where table_name like 'TJ%SHOW')
and column_name like '%MC')
group by column_name
order by column_name) a
where a.column_name = b.column_name) as data_length
from user_tab_columns b
where table_name in (select table_name from user_tables where table_name like 'TJ%SHOW') and column_name like '%MC'
order by table_name)
--11.解決操作員主鍵報錯問題
select * from user_source where name='TRI_CODE_KSDM_INSERT'
select * from user_source where name='TRI_CODE_KSDM_UPDATE'
insert into his_dict_dept (dept_id,dept_name,input,clinic_attr,last_modify_time,outp_or_inp,sno)
select ksdm,ksmc,pydm,1,xgsj,mzzy,sxh
from code_ksdm
where ksdm not in (select dept_id from his_dict_dept);
--12.關於job的創建
declare job1 number;
begin
dbms_job.submit(job1,'PJ_CWSYQQ_SHOW2;',sysdate,'sysdate+1');
--(參數1:job號,參數2:存儲名稱,參數3:下次執行時間,參數4:每次執行的間隔時間)
end;
begin
dbms_job.remove(jobno); --刪除
end;
begin
dbms_job.next_date(job,next_date); --修改下次執行時間
end;
begin
dbms_job.interval(job,interval); --修改間隔執行時間
end;
--13.在v$session表中顯示ip信息以及觸發器的創建
--1).trriger實現:
create or replace trigger on_logon_trriger
after logon on database
begin
dbms_application_info.set_client_info(sys_context('userenv','ip_address'));
end;
--2).查詢當前登錄客戶端的機器名和ip地址
select machine,client_info from v$session where audsid=userenv('sessionid');
--3).授權用戶實現v$session的使用(對用戶tpsoft_lp1011分配訪問v$session的權限)
grant select on v$session to tpsoft_lp1011
--4).創建實例:
--函數:
create or replace function fun_isdb_ipaddress
return varchar2 as
client_ipaddress varchar2(50);
begin
select client_info into client_ipaddress from v$session where audsid=userenv('sessionid');
return client_ipaddress;
end;
--關於添加的觸發器:
create or replace trigger tri_sis_xtcs_log_insert
after insert on sis_xtcs
for each row
declare ip varchar(50);
mc varchar(50);
begin
select machine into mc from v$session where audsid=userenv('sessionid');
select client_info into ip from v$session where audsid=userenv('sessionid');
begin
insert into sis_xtcs_log(xtmk,csmc,xgpb,csz,mrz,bz,xgrdm,xgrmc,xglb,xgsj)
values(:new.xtmk,:new.csmc,:new.xgpb,:new.csz,:new.mrz,:new.bz,ip,mc,'INSERT',sysdate);
end;
end tri_sis_xtcs_log;
--關於刪除的觸發器:
create or replace trigger tri_sis_xtcs_log_delete
after delete on sis_xtcs
for each row
begin
begin
insert into sis_xtcs_log(xtmk,csmc,xgpb,csz,mrz,bz,xgrdm,xgrmc,xglb,xgsj)
values(:old.xtmk,:old.csmc,:old.xgpb,:old.csz,:old.mrz,:old.bz,'temp','temp','DELETE',sysdate);
end;
end tri_sis_xtcs_log;
--14.所有表空間的使用情況
select b.file_id 文件ID號,b.tablespace_name 表空間名,b.bytes/1024/1024||'M' 字節數,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024||'M' 已使用,100-sum(nvl(a.bytes,0))/(b.bytes)*100 佔百分比,
sum(nvl(a.bytes,0))/1024/1024||'M' 剩餘空間
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id
--15.查看用戶默認的表空間
select a.username,a.default_tablespace from dba_users a
--3.查看要擴展的表空間使用的數據文件路徑與名字
select * from dba_data_files where tablespace_name='TSP_TPHY'
--4.擴展表空間
alter tablespace TSP_TPHY
add datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TPHY\TSP_TPHY1.DBF' size 500M
autoextend on
next 50M
maxsize 3000M