Oracle 溫故

create user test identified by a123456 default tablespace SYSTEM  --創建 用戶
___________+++++++++++++++++++++++++++++++++++++++_+_++++++++++++++++++++++++++++++++
            oracle的參數傳遞 案例如下:
string strSql = "select t.exmaster_id from emr_cp_exec_master t where inp_no =:inp_no and not exists(select exmaster_id from emr_cp_exec_out t2 where t2.inp_no = t.inp_no and t2.exmaster_id = t.exmaster_id)";
            OracleParameter[] param = new OracleParameter[1];
            param[0] = new OracleParameter("inp_no", OracleType.VarChar);
            param[0].Value = inp_no;
            object obj = DALUse.GetSingle(strSql, param);
            return obj == null ? 0 : Convert.ToInt32(obj);
解析: where條件後跟的"inp_in=:inp_in" 在裏面的冒號 就是傳參的關鍵字符;
傳參的過程 :
        OracleParameter[] param = new OracleParameter[1]; //一個參數 數組
            param[0] = new OracleParameter("inp_no", OracleType.VarChar); //參數的列名和 類型  如":inp_no 和類型 Varchar
            param[0].Value = inp_no; //參數的賦值
            object obj = DALUse.GetSingle(strSql, param);  //代入數據訪問層方法 返回結果
***********************************************************************+++++___________
函數 
lpad() 向左補全字符串 rpad()向右補全字符串
lower()小寫 upper()大寫
initcap()單詞手寫字母大寫 length() 長度
substr()截取字符串 instr()獲取字符串出現的位置 ltrim()刪
除字符串左邊空格 rtrim()刪除字符串右邊的空格  刪除兩側的空格  concat() 串聯字符串  翻譯字符串translate() 反轉字符串 reverse() 
數值類型的處理函數 
abs() 絕對值  四捨五入 round()   向上取整ceil()  向下取整floor() 去摸mod()  截取數字trunc() 返回數字正負性sign() 平方根sqrt() 乘方power()
獲取當前時間 sysdate()
在日期上加月份add_months() 
返回特定日期的最後一天 last_day()
返回兩個月份之間的差值months_between()
截取日期 trunc()
返回特定日期一週後的日期next_day() 
返回當前會話日期 current_date()  放回當前會話時區的時間截
返回某個時間域extract() 
轉換字符串 to_char() 
多值判斷decode()
       extract (Miniute from sysdate )
空值處理nvl() "如: nvl('a','b') 判斷a是否爲零 如果爲零則 返回值爲b 否則 a"
結果集的行號 rownum()
  強制轉換數據類型 cast()
序列 關鍵字sequence 語法  create sequence 序列名稱  重要屬性 currval(獲取當前值) 和nextval ()獲取下一個值 
drop 進行刪除
rownum=x "x表示行數" 和top類似 寫法不同 它寫在 where條件中
**********自定義函數的調用  語法  select 方法 from dual ;
********字符串拼接用到 "||" 如: 在一個數字後加上"%"   寫法 爲:  數字||"%"
___創建函數 如:加法
create or replace function add(a integer,b integer)
return number
is c number;
begin
c:=a+b;
return c;
end add;
---調用 方法 如: select add(1,2) from dual; return 3;
---序列
創建  一個自增長爲一的序列
create sequence x nocycle
調用時 用到 它的兩個僞列   crruval 和 nextval
如:創建表a 的b 列
create table a ( b integer );
insert  a values(x.crruval) ; 添加
定義多項的序列
create sequence test
statr with 10 increment by 5 從10開始 自增長的數值爲5
minvalue 10 maxvalue 20    定義最大值和最小值
cycle cache 2 order; 默認緩存  
------------創建一個語句塊 如: 根據高和麪積 求 寬
declare
width integer ;
height integer :=2;
area integer;
begin
area:=6;
width :=area/height;
dbms_output.put_line('width='||width);
exception               --異常處理
when zero_divide then       
dbms_output.put_line('Division by zero');
end;
------------
_________________________________________________________________
使用%type 對錶裏的列進行聲明變量的 類型(自動聲明爲正確的類型)
如: product 表中
declare
v_product products.product_id%type;
_____________________________________________
______________定義遊標  關鍵字cursor
定義:可以理解爲一次訪問一個組記錄.
>聲明一些變量 用於保存select語句返回的列值   --declare v_product_id products.product_id%type;
>聲明遊標 並指定select 語句  -- cursor cv_cursor is select product_id from products order by product_id ;
begin
>打開遊標         --  open cv_cursor;
>從遊標中獲取記錄  -- loop        --循環
                  --  fetch cv_cursor into v_product_id;
                  -- exit when cv_cursor%notfound --如果沒找到就退出
                   dbms_output.put_line('v_product_id'||v_product_id);
                 --end loop;4820
>關閉遊標\           -- close cv_cursor;
______________________________________________________
___________________存儲過程
create or replace procedure proc_add_unit               --創建存儲的關鍵字procedure
(
dwdm              in        code_jldw.dwdm%type,   --參數 類型在 code_jldm表的dwdm列 的類型
dwmc              in        code_jldw.dwmc%type,  --同上
pydm              in        code_jldw.pydm%type  -- 同上
)
is                                                --is  關鍵字
begin                                             -- begin 開始
      execute immediate 'insert into code_jldw(dwdm,dwmc,pydm) values(:1,:2,:3)' using dwdm,dwmc,pydm;   --execute immediate '立即執行'  插入數據 'insert into code_jldw(dwdm,dwmc,pydm) values(:1,:2,:3)' using dwdm,dwmc,pydm;   --參數性 賦值
      dbms_output.put_line(sql%rowcount);           --輸出
end;                                              --end 結束
---存儲的調用
*************注意: oracle中的相同格式的時間可以進行比較大小  如:
       tv.datetime_in>= to_date('" + firstdt.ToString() + @"','yyyy-MM-dd hh24:mi:ss')
  這位一個表列的時間  和 把變量時間 變換成相同格式的時間  進行比較 判斷 是否小於等於  表列 中的時間
-----------解決當導入數據庫時 的空間不足到不進去的
首先: 查看錶空間大小 
sql  ::        select T.TABLESPACE_NAME, ROUND(SUM(BYTES/(1024*1024)),0).TS_SIZE  FROM DBA_TABLESPACE T,DBA_DATA_FILES D WHERE T.TABLE SACE_NAME=D.TABLESPACE_NAME
GROUP BY T.TABLESPACE_NAME;
然後再查看  修改後的表空間的數據文件名稱
select  file_name,blocks,tablespace_name  from dba_date_files
在 將對應的表空間的dpf文件路徑記下來  比如 :
:/opt/orale/oradate/TEST/test.dbf;
最後修改表空間的數據文件 
sql   :  
alter   database  datafile 'opt/oracle/test/test.dbf'  resize  2000m;
_________________________
--表空間的重要作用之一  : 規劃數據表  ;
select  * from dba_data_files order by file_name ;  --查看數據庫的表空間 信息
create tablespace test datafile 'E:\database\data\test_data.dbf' size 20m autoextend on next 5m  ;--當表空間的大小不夠用時 自動擴充 爲5 兆 的空間大小;
--避免一直擴充   可以 添加限制  : maxsize 200m   解析:  最大爲200m  ;
select user_id,username,default_tablespace from dba_users order by user_id  --用戶數據庫的默認表空間
alter database default tablespace test; --修改數據庫的默認空間爲  test
alter tablespace test rename to test_data  --修改表空間的名稱爲 test_data
drop tablespace test including contents and datafiles -- 刪除表空間 包涵內容和數據文件
alter  table student add (class_id number)-- 爲已有的表添加列 
alter table student modify(class_id varchar2(20)) --修改表中的已有的列
alter table DICT_CP_SLAVE drop column S_ID;  --刪除表中的某一列
alter table student rename clolum student_id to id -- 修改列的列名
alter table student move tablespace users  --將錶轉移到表空間users中;
drop table student cascade constraints; --刪除約束;
dual -- oracle 中非常特殊的數據表  ;實際屬於系統用戶sys,具有基本用戶權限的都可以使用 查詢該表內容
select * from user_tab_cols  --獲取在此表空間中的所有表的信息和列
minus --求差集合     intersect --   natural --自然連接 就是 兩個表連接 獲取 兩個表 相同的列同時列的值相同;
full join  -- 完全連接   --  外連接 的另一種寫法 :  如  a表 和b 表   select  * from  a, b where  a.id=b.id(+) 表示  a爲主表 b 爲附註表
start  with 開始條件 connect by  遞歸條件--層次化查詢  如 select  * from student start with name=zangshan connect by id<2;
  解析: 查詢student表中 的信息 從 name='zangshang' 開始      name等於zangshang的的所有子信息
select bin_to_num(1,0,1) a  from dual  --  二進制轉換成數字函數
insert into c_students (student_id,student_name) select student_id,student_name from students where student_id<=10;  --案例 :批量插入 沒有values   --自己用到是在琢磨
--delete  與truncate table 刪除表的區別是  delete是刪除單個或多行數據的  truncate table 刪除的是表的內容 (數據) drop  是徹底的刪除表
select  * from students for  update  --  針對students表鎖定 進行修改
使用命令添加註釋 : 寫法如下:
comment on column 表名.列名    ---爲表列添加註釋
  is '註釋 ';
comment on table  表名 
is  '註釋' ;                        --爲表添加註釋
------------------------------
包的創建:定義
create or replace package  types as TYPE  cursortype is ref cursor; end;
把 數據放入遊標方法 1 大開遊標>into 遊標>關閉
----
修改內測問題
案例:
// 1. 存儲的使用:查詢配置相中是否 有此項
create or replace procedure proc_dict_config
(
       name_value in dict_config.key%type,         --傳入的key值
       outValue out dict_config.value%type      --輸出相關的值
)
as
name_num integer;---查詢出的數量
begin
--查詢傳入的key值是否存在
   select count(key) into name_num from dict_config where key=name_value;
--如果存在將key所對應的value值賦給outValue
  if name_num=1
       then
    select value into outValue from dict_config where key=name_value;
  else
outValue:='';
   end if;
end proc_dict_config;
// 2 . 在存儲中一般對數據增刪改查的操作 都會是有 下面這一句 "dbms_output.put_line(sql%rowcount);" 用來返回受影響的行數
// 3. 關鍵字"execute immediate"   立即執行
// 4. oracle 數據庫中的異常信息 是"SQLCODE" 錯誤碼 ,"SQLERRM"錯誤信息
------
  //5 觸發器的  案例學習
--當患者的信息中沒有省份的時候自動添加 "area"表示省份
create or replace trigger TRI_CODE_PROVINCE_INSERT
  after insert on CODE_PROVINCE
  for each row
declare
  -- local variables here
  --by liuxiaoke Add
  patientCount number;
begin
  --插入不存在的數據
  select count(*)
    into patientCount
    from HIS_DICT_DICT b
   where B.C_CODE = 'area'
     AND b.d_code = :NEW.PROVINCE_ID;
  if patientCount = 0 then
    begin
      --插入不存在的數據
      insert into HIS_DICT_DICT
        (C_CODE, D_CODE, D_NAME, INPUT, SNO, LAST_MODIFY_TIME)
      values
        ('area',
         :new.PROVINCE_ID,
         :new.PROVINCE_NAME,
         :new.SRM1,
         :NEW.SXH,
         :NEW.XGSJ);
    end;
  end if;
end TRI_CODE_PROVINCE_INSERT;
________________________________________________________________
學習數據庫
關係數據庫有數據結構 關係操作集合 關係完整性 組成
關係運算的特點是操作對象和操作結過都是集合
運算符: 並 交 差 及廣義笛卡爾積 (傳統) ;
        (選擇  投影  連接 以及除法) (專業)
             關係代數運算符
運算符            含義
   集合運算符   U    並          比較運算符      >   大於
                                          >= ,< .<= ,=,
                 -    差
                 n    交
                 x   笛卡爾積               
專門的關係運算符  
在關係代數運算中,笛卡爾積,連接運算最浪費時間和空間,
一 /. 數據庫優化的準則:**************************************************
1.提前執行選取運算,原因:以較小的中間結果,減少運算量和從外存讀快的次數
2. 合兵乘積與其後的選擇運算爲連接運算.  原因:把選擇與乘積一道完成再合併,以避免做完乘積後再對一個大的乘積關係運算選擇運算
3.將投影運算與其後的其他運算同時進行,以避免重複掃描關係
4.將投影運算和其前後的二目運算結合起來,使得沒有必要爲去掉某寫字段在掃描一遍關係
5. 在執行連接之前對關係做適當的預處理,就能快速地查到要連接的元組.
   方法:   1即 索引連接法 和 排序合併連接法.
6. 存儲公共子表達式.  公共子表達式的結果應存於外存(中間結果),這樣,當從外存讀出它的時間比較計算時間少時,就可節約操作時間
*****************************************************************
二  ./ 關係代述表達式的等價變換規則
三  .關係數據庫設計的目標 是生成一組適合的
性能 良好的關係模式 以減少系統中信息存儲的冗餘度,又可以獲取信息
第一範式 ; 元素是不可再分割的數據項 
第二範式 : 符合第一範式 且 每一個非主屬性完全依賴於碼(主鍵)
第三範式 :符合第二範式  且 消除了非主屬性對碼的傳遞函數依賴(有外鍵)
四 . BCNF(巴克斯範式) :
第四範式:  多值依賴  第五範式: 連接依賴
-------------SQL的核心功能
數據查詢  select
數據定義 create  drop  alter
數據操作  insert  update  delete
數據控制  grant  revoke
--------------sQL 的三級模式
視圖   : >>外模式
基本表 :?>>>  模式
存儲過程  >>> 內模式
create   創建表
修改表
alter  表名  [drop  <完整性約束名>]
alter 表名 [add <lieming><deng>]
alter 表名 [modify <列名>]
創建視圖
create view 名稱 
as  select 語句    如果 要對視圖操作 側添加 "with check option";
集合操作 :   並(union) 交 (intersect )  差 (except) (需練習不熟悉)
-----------------
WITH 字句 (把一個大的查詢分成一些小的視圖)
***********************
授權語句格式
grant <權限>[,<權限>]....
[on <對象類型><對象名>]
to<用戶>[,<用戶>]...
[with grant option];                        
::::::::::::::::::::::
收回權限
revoke <權限>[,<權限>]...
[on <對象類型><對象名>]
from<用戶>[,<用戶>]....
::::::::::::::::::::::::::::::::::::::::::觸發器  trigger
定義:是一種特殊類型的存儲過程,它通過實踐出發而執行,而存儲過程可以通過存儲過程的名稱被直接調用,
觸發器使每個站點在數據修改時自動強制執行其業務規則,並且可以用於 sql server 約束,默認值,和規則的完整性檢查
1 觸發器 >首先是 被激活 條件判斷後執行 不是直接執行的 事件之前 (激活)
==============================嵌入式sql 
結構類型 :
方便與使用相同類型的幾個字段重用 對錶創建的時候
結構類型的繼承  如: create yupe  t  under   a   ; t 繼承a
表繼承    create table b  of  of  b under p      b繼承 p
引用類型  :一個類型的屬性可以是對一個執行類型的對象的而引用
可以使用 call 調用 存儲
===++++++++++++++++++系統開發與運行
開發模式 : 瀑布模式 演化模式 螺旋模式  噴泉模式
軟件生存週期 :計劃制定     (文檔) 可行性分析報告  項目計劃書
                >需求分析          需求規格說明數
                > 軟件設計         概要設計說明書 和 詳細設計說明數
               > 程序編制(寫代碼)    源程序清單
               >測試    軟件測試計劃   軟件測試報告
              > 運行維護        使用說明書
項目管理知識 :
成本估算 :
   開發費用 =人月數 x 每個人月的代價  或  開發費用 =源代碼行數 X每行平均費用
代碼的幻術估算
  成本估算的模式 : 普特南  模型 和cocomo 模型等
風險分析  >   進度管理   任務有鬆弛時間   >人員管理
軟件開發的方法 :
結構化         嚴格的開發程序  要求有完整的文檔記錄
面向對象               和 原型法
  軟件工具   開發環境
  軟件質量管理和質量保證 
1 <功能, 可靠,易使用,效率 ,可移植 ,可維護
軟件能力成熟的模式  CMM  5個級別 
系統的分析
面向對象分析 OOA
(文檔)
系統設計說明數 
系統總體技術方案
1模塊設計 >代碼設計>輸入設計>輸出設計>數據庫設計說明> 模型庫及方法庫設計
>網絡設計>安全保密設計> 實施方案說明書
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
數據庫的恢復 和日誌有關 ()
併發 事務會造成破壞事務的隔離性和一致性   解決方法 :枷鎖;
排它鎖(修改) ,共享鎖(只讀)  ,封鎖協議
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>數據
庫系統的審計 :可以很好的監視都是誰對數據庫修改操作的情況 但是 有對性能上有影響
對數據庫的備份計劃的制定和實施 要求:
1.
根據數據變更情況,設計合理的備份週期和備份時間,最好是在業務量最小的時段進行備份
2.把事務日誌文件保存在最穩定的存儲設備上;
3.定期在事務日誌文件中加入檢查點
檢查點記錄了數據庫的正確狀態點,在數據庫恢復過程中,可以反向掃描日誌文件,找到第一個檢查點,執行UNdo 和Redo 操作,減少恢復的時間開銷
模糊查詢時間方法:  like to_date('2011-8-27','yyyy-MM-dd')
---------------------------------------
對於多個組分組基表不確定出現 重複的 基表重複列解決的方法 調用函數
聲明 序列號列  :  最常用的分析函數 排名函數 : rank ,dense_rank ,row_number() ;
--1 一種寫法
Row_number() over(partition by col1,col2 (可以是多列) order by col3 (可以是多列))  as rn
此方法記錄當前所在的行號
2種寫法 : --  
rank () over(order by col1)  as rn             
此方法 的排名 具有"跳躍性 " 如 張三 ,李四  都是 排名第二 , 那麼下一個緊挨的 王五, 是排名 第四
3. dense_rank() over(order by col1 ) as rn
此方法 的排名 不具有"跳躍性 "  排名同名次可以
------
分區窗體
創建分區窗體的 語法 : partition by 
--窗體字句  追隨 前後的信息
over ( order by 列名 rows between 位移量 preceding and 位移量 following )
案例 ::
selecT cp_name ,cp_id  ,dense_rank() over(order by cp_id )as  recodern,
sum(cp_id) over(order by cp_id rows between 1 preceding and 1 following ) sumcpid
  from dict_cp_master
--------------------------------------------------------------------
4 fist_value () ,last_value() , lead() ,lag()
然後  查找是 加上 where 條件  : where rn=1
獲取時間 小時 加 8  加的是時區
select extract(hour from systimestamp )+8 newdate from dual
------------------------------------------------------關於sql------------------------------------------------
--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
  ----------------------關聯相應的表插入數據
merge into dict_cp_fhzdwjyyb jyyb
    using(select * from(select dcv.cp_id ,  dcv.diag_code, Row_number() over(partition by dcv.diag_code order by dcv.diag_code) as rn from dict_cp_vs_icd10 dcv  ) where  rn=1  ) sour
    on (jyyb.diag_no = sour.diag_code)
    when matched then
      update
        set jyyb.cp_id = sour.cp_id
--------獲取某表中的列數
select count(1) from user_col_comments where table_name =upper('his_patient_base')
--循環的使用
--語句塊
declare v_id number :=0;
        v_name varchar2(30) ;
begin 
for v_id in 1..3  loop
select colls.table_name into v_name from  (select tu.table_name ,
    row_number() over(partition by tu.tablespace_name  order by tu.table_name) rn
                from user_tables tu 
                where tu.table_name like 'DICT_CP%') colls where colls.rn = v_id;               
                dbms_output.put_line(v_id || '測試' || v_name);
--                truncate table v_name;  不行
                end loop;
end; 
--測試 語句塊
declare cursor cu_reurn is
select cp_name ,cp_id from dict_cp_master;
v_name  dict_cp_master.cp_name%type;
v_id    dict_cp_master.cp_id%type;
begin
open cu_reurn ;
fetch cu_reurn into v_name ,v_id;
while cu_reurn % found loop
dbms_output.put_line(v_name || ' 路徑' || v_id);
fetch cu_reurn into v_name ,v_id ;
end loop;
close cu_reurn;
end ;
----------------------------------
select * from dba_users
create user test identified by a123456 default tablespace SYSTEM  --創建用戶
select * from  dba_objects  --查看對象 所有的
select sys_context('userenv','current_user') current_user,sys_context('userenv' ,'current_schema') current_schema from dual; --獲取當前數據庫 和用戶
alter USER TPEMR ACCOUNT UNLOCK  --解鎖
select  * from dba_sys_privs  --系統 權限
select  * from system_privilege_map -- 系統權限信息
--授權 grant  回收權限 revoke
--1
grant create session ,create table to dev_std with admin_option;
revoke create session ,create table to dev_std
--行變列\
create or replace function row2colunm(sqlString varchar2)
return varchar2 as
begin
declare type cu_type is ref cursor ;
tpm_cursor cu_type;
tmp_row varchar2(20);
_return varchar2(500);
begin
open tmp_cursor is sqlString ;
fetch tmp_cursor  into tmp_row;
while tmp_cursor%found loop
_return := _return ||tmp_row ||',';
fetch tmp_cursor into tmp_row ;
end loop ;
return _return;
end
end row2colunm;
--測試
select row2colunm('select cp_name from dict_cP_master where rownum <10') reu  from dual;
--包 package  就像是接口
select * from v$sgastat   --查看系統全區
select namespace ,gets, gethits ,gethitratio ,pins,pinhits,pinhitratio from v$librarycache;
--修改 系統的緩存區的內存
alter SYSTEM set sga_max_size =1000m scope = both ;spfile ;
--索引
create index objindex on test_index(object_name);
create table test_index
as select * from dba_objects;
select * from test_index  --0.031
select * from dba_objects --0.063
--索引 使用規則:
--不宜使用
-- 1. 數據量較小的表  2 . 有着頻繁數據變更的表不宜使用索引
------------------
start with lei=' ' connect by prior  mariket_id
--
管道的學習  : pipelined  ;
首先 聲明 一個table 中所需的列  放在一個類型中; 再 定義一個table 對象 , 最後使用管道;
如下 :
1 、create or replace type maType_objType as object
(
醫囑類型編碼               varchar2(20),
醫囑類型名稱               varchar2(10),
拼音碼                     varchar2(10),
自定義碼                   varchar2(10)
)
2、
create or replace type maType_tableType as table of maType_objType
3、
create or replace function fun_get_maType
return maType_tableType pipelined
is
v_table_object maType_objType;
begin
       for t_row in (select * from code_ma_type t order by t.ma_type_code asc)
       loop
           v_table_object := maType_objType(t_row.ma_type_code,t_row.ma_type_name,t_row.char_code,t_row.custom_code);
           pipe row(v_table_object);
       end loop;
       return;
end;
-------------
alter table code_cwxxb modify hlks varchar2(4);
----------死鎖解決方法 :
“”
--2.關於鎖表問題的解決:
  select * from v$locked_object ;--查看被鎖定的數據,得到object_id在dba_objects中可以查看出來被鎖定的表
  select * from dba_objects where object_id ='69684';--可以看出來哪個表被鎖住
  select * from v$session where  sid =104;--從v$locked_object得到sid
  alter system kill session '104,61103';--傳入sid和serial值
 
create user test identified by a123456 default tablespace SYSTEM  --創建 用戶
___________+++++++++++++++++++++++++++++++++++++++_+_++++++++++++++++++++++++++++++++
            oracle的參數傳遞 案例如下:
string strSql = "select t.exmaster_id from emr_cp_exec_master t where inp_no =:inp_no and not exists(select exmaster_id from emr_cp_exec_out t2 where t2.inp_no = t.inp_no and t2.exmaster_id = t.exmaster_id)";
            OracleParameter[] param = new OracleParameter[1];
            param[0] = new OracleParameter("inp_no", OracleType.VarChar);
            param[0].Value = inp_no;
            object obj = DALUse.GetSingle(strSql, param);
            return obj == null ? 0 : Convert.ToInt32(obj);
解析: where條件後跟的"inp_in=:inp_in" 在裏面的冒號 就是傳參的關鍵字符;
傳參的過程 :
        OracleParameter[] param = new OracleParameter[1]; //一個參數 數組
            param[0] = new OracleParameter("inp_no", OracleType.VarChar); //參數的列名和 類型  如":inp_no 和類型 Varchar
            param[0].Value = inp_no; //參數的賦值
            object obj = DALUse.GetSingle(strSql, param);  //代入數據訪問層方法 返回結果
***********************************************************************+++++___________
函數 
lpad() 向左補全字符串 rpad()向右補全字符串
lower()小寫 upper()大寫
initcap()單詞手寫字母大寫 length() 長度
substr()截取字符串 instr()獲取字符串出現的位置 ltrim()刪
除字符串左邊空格 rtrim()刪除字符串右邊的空格  刪除兩側的空格  concat() 串聯字符串  翻譯字符串translate() 反轉字符串 reverse() 
數值類型的處理函數 
abs() 絕對值  四捨五入 round()   向上取整ceil()  向下取整floor() 去摸mod()  截取數字trunc() 返回數字正負性sign() 平方根sqrt() 乘方power()
獲取當前時間 sysdate()
在日期上加月份add_months() 
返回特定日期的最後一天 last_day()
返回兩個月份之間的差值months_between()
截取日期 trunc()
返回特定日期一週後的日期next_day() 
返回當前會話日期 current_date()  放回當前會話時區的時間截
返回某個時間域extract() 
轉換字符串 to_char() 
多值判斷decode()
       extract (Miniute from sysdate )
空值處理nvl() "如: nvl('a','b') 判斷a是否爲零 如果爲零則 返回值爲b 否則 a"
結果集的行號 rownum()
  強制轉換數據類型 cast()
序列 關鍵字sequence 語法  create sequence 序列名稱  重要屬性 currval(獲取當前值) 和nextval ()獲取下一個值 
drop 進行刪除
rownum=x "x表示行數" 和top類似 寫法不同 它寫在 where條件中
**********自定義函數的調用  語法  select 方法 from dual ;
********字符串拼接用到 "||" 如: 在一個數字後加上"%"   寫法 爲:  數字||"%"
___創建函數 如:加法
create or replace function add(a integer,b integer)
return number
is c number;
begin
c:=a+b;
return c;
end add;
---調用 方法 如: select add(1,2) from dual; return 3;
---序列
創建  一個自增長爲一的序列
create sequence x nocycle
調用時 用到 它的兩個僞列   crruval 和 nextval
如:創建表a 的b 列
create table a ( b integer );
insert  a values(x.crruval) ; 添加
定義多項的序列
create sequence test
statr with 10 increment by 5 從10開始 自增長的數值爲5
minvalue 10 maxvalue 20    定義最大值和最小值
cycle cache 2 order; 默認緩存  
------------創建一個語句塊 如: 根據高和麪積 求 寬
declare
width integer ;
height integer :=2;
area integer;
begin
area:=6;
width :=area/height;
dbms_output.put_line('width='||width);
exception               --異常處理
when zero_divide then       
dbms_output.put_line('Division by zero');
end;
------------
_________________________________________________________________
使用%type 對錶裏的列進行聲明變量的 類型(自動聲明爲正確的類型)
如: product 表中
declare
v_product products.product_id%type;
_____________________________________________
______________定義遊標  關鍵字cursor
定義:可以理解爲一次訪問一個組記錄.
>聲明一些變量 用於保存select語句返回的列值   --declare v_product_id products.product_id%type;
>聲明遊標 並指定select 語句  -- cursor cv_cursor is select product_id from products order by product_id ;
begin
>打開遊標         --  open cv_cursor;
>從遊標中獲取記錄  -- loop        --循環
                  --  fetch cv_cursor into v_product_id;
                  -- exit when cv_cursor%notfound --如果沒找到就退出
                   dbms_output.put_line('v_product_id'||v_product_id);
                 --end loop;4820
>關閉遊標\           -- close cv_cursor;
______________________________________________________
___________________存儲過程
create or replace procedure proc_add_unit               --創建存儲的關鍵字procedure
(
dwdm              in        code_jldw.dwdm%type,   --參數 類型在 code_jldm表的dwdm列 的類型
dwmc              in        code_jldw.dwmc%type,  --同上
pydm              in        code_jldw.pydm%type  -- 同上
)
is                                                --is  關鍵字
begin                                             -- begin 開始
      execute immediate 'insert into code_jldw(dwdm,dwmc,pydm) values(:1,:2,:3)' using dwdm,dwmc,pydm;   --execute immediate '立即執行'  插入數據 'insert into code_jldw(dwdm,dwmc,pydm) values(:1,:2,:3)' using dwdm,dwmc,pydm;   --參數性 賦值
      dbms_output.put_line(sql%rowcount);           --輸出
end;                                              --end 結束
---存儲的調用
*************注意: oracle中的相同格式的時間可以進行比較大小  如:
       tv.datetime_in>= to_date('" + firstdt.ToString() + @"','yyyy-MM-dd hh24:mi:ss')
  這位一個表列的時間  和 把變量時間 變換成相同格式的時間  進行比較 判斷 是否小於等於  表列 中的時間
-----------解決當導入數據庫時 的空間不足到不進去的
首先: 查看錶空間大小 
sql  ::        select T.TABLESPACE_NAME, ROUND(SUM(BYTES/(1024*1024)),0).TS_SIZE  FROM DBA_TABLESPACE T,DBA_DATA_FILES D WHERE T.TABLE SACE_NAME=D.TABLESPACE_NAME
GROUP BY T.TABLESPACE_NAME;
然後再查看  修改後的表空間的數據文件名稱
select  file_name,blocks,tablespace_name  from dba_date_files
在 將對應的表空間的dpf文件路徑記下來  比如 :
:/opt/orale/oradate/TEST/test.dbf;
最後修改表空間的數據文件 
sql   :  
alter   database  datafile 'opt/oracle/test/test.dbf'  resize  2000m;
_________________________
--表空間的重要作用之一  : 規劃數據表  ;
select  * from dba_data_files order by file_name ;  --查看數據庫的表空間 信息
create tablespace test datafile 'E:\database\data\test_data.dbf' size 20m autoextend on next 5m  ;--當表空間的大小不夠用時 自動擴充 爲5 兆 的空間大小;
--避免一直擴充   可以 添加限制  : maxsize 200m   解析:  最大爲200m  ;
select user_id,username,default_tablespace from dba_users order by user_id  --用戶數據庫的默認表空間
alter database default tablespace test; --修改數據庫的默認空間爲  test
alter tablespace test rename to test_data  --修改表空間的名稱爲 test_data
drop tablespace test including contents and datafiles -- 刪除表空間 包涵內容和數據文件
alter  table student add (class_id number)-- 爲已有的表添加列 
alter table student modify(class_id varchar2(20)) --修改表中的已有的列
alter table DICT_CP_SLAVE drop column S_ID;  --刪除表中的某一列
alter table student rename clolum student_id to id -- 修改列的列名
alter table student move tablespace users  --將錶轉移到表空間users中;
drop table student cascade constraints; --刪除約束;
dual -- oracle 中非常特殊的數據表  ;實際屬於系統用戶sys,具有基本用戶權限的都可以使用 查詢該表內容
select * from user_tab_cols  --獲取在此表空間中的所有表的信息和列
minus --求差集合     intersect --   natural --自然連接 就是 兩個表連接 獲取 兩個表 相同的列同時列的值相同;
full join  -- 完全連接   --  外連接 的另一種寫法 :  如  a表 和b 表   select  * from  a, b where  a.id=b.id(+) 表示  a爲主表 b 爲附註表
start  with 開始條件 connect by  遞歸條件--層次化查詢  如 select  * from student start with name=zangshan connect by id<2;
  解析: 查詢student表中 的信息 從 name='zangshang' 開始      name等於zangshang的的所有子信息
select bin_to_num(1,0,1) a  from dual  --  二進制轉換成數字函數
insert into c_students (student_id,student_name) select student_id,student_name from students where student_id<=10;  --案例 :批量插入 沒有values   --自己用到是在琢磨
--delete  與truncate table 刪除表的區別是  delete是刪除單個或多行數據的  truncate table 刪除的是表的內容 (數據) drop  是徹底的刪除表
select  * from students for  update  --  針對students表鎖定 進行修改
使用命令添加註釋 : 寫法如下:
comment on column 表名.列名    ---爲表列添加註釋
  is '註釋 ';
comment on table  表名 
is  '註釋' ;                        --爲表添加註釋
------------------------------
包的創建:定義
create or replace package  types as TYPE  cursortype is ref cursor; end;
把 數據放入遊標方法 1 大開遊標>into 遊標>關閉
----
修改內測問題
案例:
// 1. 存儲的使用:查詢配置相中是否 有此項
create or replace procedure proc_dict_config
(
       name_value in dict_config.key%type,         --傳入的key值
       outValue out dict_config.value%type      --輸出相關的值
)
as
name_num integer;---查詢出的數量
begin
--查詢傳入的key值是否存在
   select count(key) into name_num from dict_config where key=name_value;
--如果存在將key所對應的value值賦給outValue
  if name_num=1
       then
    select value into outValue from dict_config where key=name_value;
  else
outValue:='';
   end if;
end proc_dict_config;
// 2 . 在存儲中一般對數據增刪改查的操作 都會是有 下面這一句 "dbms_output.put_line(sql%rowcount);" 用來返回受影響的行數
// 3. 關鍵字"execute immediate"   立即執行
// 4. oracle 數據庫中的異常信息 是"SQLCODE" 錯誤碼 ,"SQLERRM"錯誤信息
------
  //5 觸發器的  案例學習
--當患者的信息中沒有省份的時候自動添加 "area"表示省份
create or replace trigger TRI_CODE_PROVINCE_INSERT
  after insert on CODE_PROVINCE
  for each row
declare
  -- local variables here
  --by liuxiaoke Add
  patientCount number;
begin
  --插入不存在的數據
  select count(*)
    into patientCount
    from HIS_DICT_DICT b
   where B.C_CODE = 'area'
     AND b.d_code = :NEW.PROVINCE_ID;
  if patientCount = 0 then
    begin
      --插入不存在的數據
      insert into HIS_DICT_DICT
        (C_CODE, D_CODE, D_NAME, INPUT, SNO, LAST_MODIFY_TIME)
      values
        ('area',
         :new.PROVINCE_ID,
         :new.PROVINCE_NAME,
         :new.SRM1,
         :NEW.SXH,
         :NEW.XGSJ);
    end;
  end if;
end TRI_CODE_PROVINCE_INSERT;
________________________________________________________________
學習數據庫
關係數據庫有數據結構 關係操作集合 關係完整性 組成
關係運算的特點是操作對象和操作結過都是集合
運算符: 並 交 差 及廣義笛卡爾積 (傳統) ;
        (選擇  投影  連接 以及除法) (專業)
             關係代數運算符
運算符            含義
   集合運算符   U    並          比較運算符      >   大於
                                          >= ,< .<= ,=,
                 -    差
                 n    交
                 x   笛卡爾積               
專門的關係運算符  
在關係代數運算中,笛卡爾積,連接運算最浪費時間和空間,
一 /. 數據庫優化的準則:**************************************************
1.提前執行選取運算,原因:以較小的中間結果,減少運算量和從外存讀快的次數
2. 合兵乘積與其後的選擇運算爲連接運算.  原因:把選擇與乘積一道完成再合併,以避免做完乘積後再對一個大的乘積關係運算選擇運算
3.將投影運算與其後的其他運算同時進行,以避免重複掃描關係
4.將投影運算和其前後的二目運算結合起來,使得沒有必要爲去掉某寫字段在掃描一遍關係
5. 在執行連接之前對關係做適當的預處理,就能快速地查到要連接的元組.
   方法:   1即 索引連接法 和 排序合併連接法.
6. 存儲公共子表達式.  公共子表達式的結果應存於外存(中間結果),這樣,當從外存讀出它的時間比較計算時間少時,就可節約操作時間
*****************************************************************
二  ./ 關係代述表達式的等價變換規則
三  .關係數據庫設計的目標 是生成一組適合的
性能 良好的關係模式 以減少系統中信息存儲的冗餘度,又可以獲取信息
第一範式 ; 元素是不可再分割的數據項 
第二範式 : 符合第一範式 且 每一個非主屬性完全依賴於碼(主鍵)
第三範式 :符合第二範式  且 消除了非主屬性對碼的傳遞函數依賴(有外鍵)
四 . BCNF(巴克斯範式) :
第四範式:  多值依賴  第五範式: 連接依賴
-------------SQL的核心功能
數據查詢  select
數據定義 create  drop  alter
數據操作  insert  update  delete
數據控制  grant  revoke
--------------sQL 的三級模式
視圖   : >>外模式
基本表 :?>>>  模式
存儲過程  >>> 內模式
create   創建表
修改表
alter  表名  [drop  <完整性約束名>]
alter 表名 [add <lieming><deng>]
alter 表名 [modify <列名>]
創建視圖
create view 名稱 
as  select 語句    如果 要對視圖操作 側添加 "with check option";
集合操作 :   並(union) 交 (intersect )  差 (except) (需練習不熟悉)
-----------------
WITH 字句 (把一個大的查詢分成一些小的視圖)
***********************
授權語句格式
grant <權限>[,<權限>]....
[on <對象類型><對象名>]
to<用戶>[,<用戶>]...
[with grant option];                        
::::::::::::::::::::::
收回權限
revoke <權限>[,<權限>]...
[on <對象類型><對象名>]
from<用戶>[,<用戶>]....
::::::::::::::::::::::::::::::::::::::::::觸發器  trigger
定義:是一種特殊類型的存儲過程,它通過實踐出發而執行,而存儲過程可以通過存儲過程的名稱被直接調用,
觸發器使每個站點在數據修改時自動強制執行其業務規則,並且可以用於 sql server 約束,默認值,和規則的完整性檢查
1 觸發器 >首先是 被激活 條件判斷後執行 不是直接執行的 事件之前 (激活)
==============================嵌入式sql 
結構類型 :
方便與使用相同類型的幾個字段重用 對錶創建的時候
結構類型的繼承  如: create yupe  t  under   a   ; t 繼承a
表繼承    create table b  of  of  b under p      b繼承 p
引用類型  :一個類型的屬性可以是對一個執行類型的對象的而引用
可以使用 call 調用 存儲
===++++++++++++++++++系統開發與運行
開發模式 : 瀑布模式 演化模式 螺旋模式  噴泉模式
軟件生存週期 :計劃制定     (文檔) 可行性分析報告  項目計劃書
                >需求分析          需求規格說明數
                > 軟件設計         概要設計說明書 和 詳細設計說明數
               > 程序編制(寫代碼)    源程序清單
               >測試    軟件測試計劃   軟件測試報告
              > 運行維護        使用說明書
項目管理知識 :
成本估算 :
   開發費用 =人月數 x 每個人月的代價  或  開發費用 =源代碼行數 X每行平均費用
代碼的幻術估算
  成本估算的模式 : 普特南  模型 和cocomo 模型等
風險分析  >   進度管理   任務有鬆弛時間   >人員管理
軟件開發的方法 :
結構化         嚴格的開發程序  要求有完整的文檔記錄
面向對象               和 原型法
  軟件工具   開發環境
  軟件質量管理和質量保證 
1 <功能, 可靠,易使用,效率 ,可移植 ,可維護
軟件能力成熟的模式  CMM  5個級別 
系統的分析
面向對象分析 OOA
(文檔)
系統設計說明數 
系統總體技術方案
1模塊設計 >代碼設計>輸入設計>輸出設計>數據庫設計說明> 模型庫及方法庫設計
>網絡設計>安全保密設計> 實施方案說明書
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
數據庫的恢復 和日誌有關 ()
併發 事務會造成破壞事務的隔離性和一致性   解決方法 :枷鎖;
排它鎖(修改) ,共享鎖(只讀)  ,封鎖協議
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>數據
庫系統的審計 :可以很好的監視都是誰對數據庫修改操作的情況 但是 有對性能上有影響
對數據庫的備份計劃的制定和實施 要求:
1.
根據數據變更情況,設計合理的備份週期和備份時間,最好是在業務量最小的時段進行備份
2.把事務日誌文件保存在最穩定的存儲設備上;
3.定期在事務日誌文件中加入檢查點
檢查點記錄了數據庫的正確狀態點,在數據庫恢復過程中,可以反向掃描日誌文件,找到第一個檢查點,執行UNdo 和Redo 操作,減少恢復的時間開銷
模糊查詢時間方法:  like to_date('2011-8-27','yyyy-MM-dd')
---------------------------------------
對於多個組分組基表不確定出現 重複的 基表重複列解決的方法 調用函數
聲明 序列號列  :  最常用的分析函數 排名函數 : rank ,dense_rank ,row_number() ;
--1 一種寫法
Row_number() over(partition by col1,col2 (可以是多列) order by col3 (可以是多列))  as rn
此方法記錄當前所在的行號
2種寫法 : --  
rank () over(order by col1)  as rn             
此方法 的排名 具有"跳躍性 " 如 張三 ,李四  都是 排名第二 , 那麼下一個緊挨的 王五, 是排名 第四
3. dense_rank() over(order by col1 ) as rn
此方法 的排名 不具有"跳躍性 "  排名同名次可以
------
分區窗體
創建分區窗體的 語法 : partition by 
--窗體字句  追隨 前後的信息
over ( order by 列名 rows between 位移量 preceding and 位移量 following )
案例 ::
selecT cp_name ,cp_id  ,dense_rank() over(order by cp_id )as  recodern,
sum(cp_id) over(order by cp_id rows between 1 preceding and 1 following ) sumcpid
  from dict_cp_master
--------------------------------------------------------------------
4 fist_value () ,last_value() , lead() ,lag()
然後  查找是 加上 where 條件  : where rn=1
獲取時間 小時 加 8  加的是時區
select extract(hour from systimestamp )+8 newdate from dual
------------------------------------------------------關於sql------------------------------------------------
--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
  ----------------------關聯相應的表插入數據
merge into dict_cp_fhzdwjyyb jyyb
    using(select * from(select dcv.cp_id ,  dcv.diag_code, Row_number() over(partition by dcv.diag_code order by dcv.diag_code) as rn from dict_cp_vs_icd10 dcv  ) where  rn=1  ) sour
    on (jyyb.diag_no = sour.diag_code)
    when matched then
      update
        set jyyb.cp_id = sour.cp_id
--------獲取某表中的列數
select count(1) from user_col_comments where table_name =upper('his_patient_base')
--循環的使用
--語句塊
declare v_id number :=0;
        v_name varchar2(30) ;
begin 
for v_id in 1..3  loop
select colls.table_name into v_name from  (select tu.table_name ,
    row_number() over(partition by tu.tablespace_name  order by tu.table_name) rn
                from user_tables tu 
                where tu.table_name like 'DICT_CP%') colls where colls.rn = v_id;               
                dbms_output.put_line(v_id || '測試' || v_name);
--                truncate table v_name;  不行
                end loop;
end; 
--測試 語句塊
declare cursor cu_reurn is
select cp_name ,cp_id from dict_cp_master;
v_name  dict_cp_master.cp_name%type;
v_id    dict_cp_master.cp_id%type;
begin
open cu_reurn ;
fetch cu_reurn into v_name ,v_id;
while cu_reurn % found loop
dbms_output.put_line(v_name || ' 路徑' || v_id);
fetch cu_reurn into v_name ,v_id ;
end loop;
close cu_reurn;
end ;
----------------------------------
select * from dba_users
create user test identified by a123456 default tablespace SYSTEM  --創建用戶
select * from  dba_objects  --查看對象 所有的
select sys_context('userenv','current_user') current_user,sys_context('userenv' ,'current_schema') current_schema from dual; --獲取當前數據庫 和用戶
alter USER TPEMR ACCOUNT UNLOCK  --解鎖
select  * from dba_sys_privs  --系統 權限
select  * from system_privilege_map -- 系統權限信息
--授權 grant  回收權限 revoke
--1
grant create session ,create table to dev_std with admin_option;
revoke create session ,create table to dev_std
--行變列\
create or replace function row2colunm(sqlString varchar2)
return varchar2 as
begin
declare type cu_type is ref cursor ;
tpm_cursor cu_type;
tmp_row varchar2(20);
_return varchar2(500);
begin
open tmp_cursor is sqlString ;
fetch tmp_cursor  into tmp_row;
while tmp_cursor%found loop
_return := _return ||tmp_row ||',';
fetch tmp_cursor into tmp_row ;
end loop ;
return _return;
end
end row2colunm;
--測試
select row2colunm('select cp_name from dict_cP_master where rownum <10') reu  from dual;
--包 package  就像是接口
select * from v$sgastat   --查看系統全區
select namespace ,gets, gethits ,gethitratio ,pins,pinhits,pinhitratio from v$librarycache;
--修改 系統的緩存區的內存
alter SYSTEM set sga_max_size =1000m scope = both ;spfile ;
--索引
create index objindex on test_index(object_name);
create table test_index
as select * from dba_objects;
select * from test_index  --0.031
select * from dba_objects --0.063
--索引 使用規則:
--不宜使用
-- 1. 數據量較小的表  2 . 有着頻繁數據變更的表不宜使用索引
------------------
start with lei=' ' connect by prior  mariket_id
--
管道的學習  : pipelined  ;
首先 聲明 一個table 中所需的列  放在一個類型中; 再 定義一個table 對象 , 最後使用管道;
如下 :
1 、create or replace type maType_objType as object
(
醫囑類型編碼               varchar2(20),
醫囑類型名稱               varchar2(10),
拼音碼                     varchar2(10),
自定義碼                   varchar2(10)
)
2、
create or replace type maType_tableType as table of maType_objType
3、
create or replace function fun_get_maType
return maType_tableType pipelined
is
v_table_object maType_objType;
begin
       for t_row in (select * from code_ma_type t order by t.ma_type_code asc)
       loop
           v_table_object := maType_objType(t_row.ma_type_code,t_row.ma_type_name,t_row.char_code,t_row.custom_code);
           pipe row(v_table_object);
       end loop;
       return;
end;
-------------
alter table code_cwxxb modify hlks varchar2(4);
----------死鎖解決方法 :
“”
--2.關於鎖表問題的解決:
  select * from v$locked_object ;--查看被鎖定的數據,得到object_id在dba_objects中可以查看出來被鎖定的表
  select * from dba_objects where object_id ='69684';--可以看出來哪個表被鎖住
  select * from v$session where  sid =104;--從v$locked_object得到sid
  alter system kill session '104,61103';--傳入sid和serial值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章