程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> ORACLE應用經驗--(1)

ORACLE應用經驗--(1)

編輯:Oracle數據庫基礎

JAN-1(January)   FEB-2(February)   MAR-3(March) 
APR-4(April)     MAY-5(May)        JUN-6(June) 
JUL-7(July)      AUG-8(August)     SEP-9(September) 
OCT-10(October)  NOV-11(November)  DEC-12(December) 
******************************************************************** 
****************************常用設置******************************** 
---on-log 觸發器編寫示范 
Declare 
  flag      varchar2(80):=null; 
  cou       number:=1; 
  n         number; 
Begin 
  Loop 
       LOGOn(USERNAME,PASSWord||’@’||CONNECT,PROPERTY_FALSE....); 
       flag:=Get_Application_Property(DATASOURCE); 
       Exit when cou>8 or flag=’Oracle’; 
       cou:=cou+1; 
  End Loop; 
  If flag<>’Oracle’ then 
     set_alert_property(’a_1’,alert_message_text, 
                          ’登錄失敗,請返回重試’); 
     n:=show_alert(’a_1’); 
     raise form_trigger_failure;   --中斷 FORM 
  End if; 
End; 
---對基表執行查詢(只對基表) 
   Set_Block_Property(’Block_Name’,Default_Where,’where ......’); 
   Go_Block(’Block_Name’); 
   Execute_Query; 
*************************************************** 
  變量: 
       局部變量;  
     

全局變量--------------1.:block.item 
                 2.:parameter.v_name 
                 3.:global.V_name 
         
*************************************************** 
---同步發生顯示 
    synchronize;  
---實施’TRIGGER’觸發 
   EXECUTE_TRIGGER(TRIGGER_NAME); 
---清除模塊 
clear_block(NO_VALIDATE);  ’NO_VALIDATE’不生效  
--建立警告欄並由警告欄選擇 
Declare 
   n     number; 
Begin 
   Set_Alert_Property(’Alert_Name’,Alert_Message_Text,’message’); 
   n:=Show_Alert(’Alert_Name’); 
   If n=Alert_Button1 then 
      ...;     
   ElsIf n=Alert_Button2 then       
   ...; 
   End if; 
End; 
---WINDOW設置 
  --運行時最大化,最小化 
  Set_Window_Property(FORMS_MDI_WINDOW, WINDOW_STATE, MAXIMIZE|MINIMIZE); 
  --WINDOW標題 
  Set_Window_Property(FORMS_MDI_WINDOW, title,’TEXT’); 
  --退出是否為真 
  Set_Window_Property(FORMS_MDI_WINDOW, REMOVE_ON_EXIT,PROPERTY_FALSE|TRUE); 
---設置系統提示信息等級 
  :System.Message_Level:= ’5|10|15|20’;  
---設置ITEM屬性 
  --設置ITEM屬性ENABLED 
  Set_Item_Property(’Block_name.Item_name’,ENABLED,PROPERTY_TRUE|FALSE); 
  --設置ITEM屬性NAVIGABLE 
  Set_Item_Property(’Block_name.Item_name’,NAVIGABLE,PROPERTY_TRUE|FALSE); 
  --設置ITEM屬性VISUAL_ATTRIBUTE 
  Set_Item_Property(’Block_name.Item_name’,visual_attribute,’vname’);  
        --

’vname’由導航器中(VISUAL_ATTRIBUTES)定義 
  --設置ITEM屬性DISPLAYED 
  Set_Item_Property(’Block_name.Item_name’,displayed,TRUE|FALSE); 
  --設置ITEM屬性POSITION 
  Set_Item_Property(’Block_name.Item_name’,position,x,y); 
  --設置ITEM_SIZE 
  Set_Item_Property(’Block_name.Item_name’,item_size,x,y); 
  --設置ITEM屬性LABLE 
  Set_Item_Property(’Block_name.Item_name’,LABEL,’MESSAGE’) 
---設置LIST ITEM示范 
Declare 
  n  number; 
Begin 
     clear_list(’b1.fkfs’); 
     m:=populate_group(’fkfs’); 
     populate_list(’b1.fkfs’,’fkfs’); 
/* 
   其中FKFS 為 record group ; 
*/ 
End; 
---增加’LIST ITEM’ 
 &nbsp;     Add_List_Element(list_name, list_index, list_label, list_value); 
       Add_List_Element(list_id, list_index, list_label, list_value); 
---刪除’LIST ITEM’項 
      Delete_List_Element(list_name, list_index); 
      Delete_List_Element(list_id, list_index); 
   例: 
      BEGIN  
         Delete_List_Element(’years’,1);  
         Add_List_Element(’years’, 1, ’1994’, ’1994’);  
      END;  
---獲得’LIST ITEM’項的組成 
     1.獲得’LIST ITEM’的總和    
         GET_LIST_ELEMENT_COUNT(list_id); 
         GET_LIST_ELEMENT_COUNT(list_name);  
     2.獲得’LIST ITEM’的標簽 
      &nbsp;  GET_LIST_ELEMENT_LABEL(list_id, list_name, list_index);  
         GET_LIST_ELEMENT_LABEL(list_name, list_index); 
      
     3.獲得’LIST ITEM’的值 
         GET_LIST_ELEMENT_VALUE(list_id, list_index);  
         GET_LIST_ELEMENT_VALUE(list_name, list_index);   

---設置’時間’ 
DECLARE  
    timer_id Timer;  
    one_minute NUMBER(5) := 60000;  
BEGIN  
    timer_id := CREATE_TIMER(’emp_timer’, one_minute, REPEAT|NO_REPEAT);  
END; 
---產生一個’EDITER’框 
DECLARE  
  ed_id  Editor;  
  status BOOLEAN;  
BEGIN  
  ed_id:=Find_Editor(’edit_name’); ---由’edit_name’導航器定義 

  IF NOT Id_Null(ed_id) THEN  
     Show_Editor(ed_id, NULL, :block_name.item_name, status); 
  ELSE  
     Message(’Editor "Happy_Edit_Window" not found’);  
     RAISE Form_Trigger_Failure;  
  END IF;  
END;  
----產生一個’LOV’框 
DECLARE  
  lv_id  LOV;  
  status BOOLEAN;  
BEGIN  
      lv_id := Find_LOV(’lov_name’);   ---’lov_name’ 由導航器定義   
--  IF Id_Null(lv_id) THEN  
--     lv_id := Find_LOV(’lov_name1’); ---’lov_name1’ 由導航器定義  
--  END IF;  
  status := Show_LOV(lv_id,10,

20);  
END;    
---定義一個’EXCEPTION’例外 
Declare 
  err_1    exception; 
Begin 
  If ...  then 
     Raise err-1; 
  End if; 
Exception 
    When err_1 then 
         .... 
END; 
---設置應用特性(光標類型) 
      SET_APPLICATION_PROPERTY(CURSOR_STYLE, 
        ’CROSSHAIR’|’BUSY’|’HELP’|’DEFAULT’|’INSERTION’); 
       
***********************************************************************     
**********************************函數********************************* 
---把字符串的字符變成全大寫(UPPER)全小寫(LOWER)第一個字母大寫(INITCAP) 
     UPPER|LOWER|INITCAP(STRING) 
---在文件的左(’LPAD’)右(’RPAD’)粘貼字符 
      LPAD|RPAD(STRING,LENGTH,’SET’)  "LENGTH"為總字符長"SET"為粘貼字符 
---在文件的左(’LTRIM’)右(’RTRIM’)刪除字符 
      LTRIM|RTRIM(SRTING,’SET’)    "SET"為待刪除字符 
---找出’字符集’在字符串中的位置 
  INSTR(’STRING’,’SET’,N,M)  從’STRING’中找出’SET’從’N’位起第’M’個  
---數的絕對值 
   ABS(VALUE) 
---’MOD’模 
    MOD(VALUE,除數) 返回’除數’除’VALUE’的余數常用判斷’VALUE’是否為整數    
---把’VALUE’從’N’位四捨五入’ROUND’  或從’N’位截斷’TRUNC’ 
     ROUND|TRUNC(VALUE,N) 
---返回’VALUE’的符號 
   SIGN(VALUE) 
    
---列表的最大值 
    GREATEST(N1,N1...); 
   列表的最小值   LEAST(N1,N1...); 
---返回小於或等於數的最大整數 
   FLOOR(VALUE)   floor(1.3)=1  floor(-1.3)=-2 
---返回大於或等於數的最小整數 
   CEL(VALUE)    cell (1.3)=2  cell (-1.3)=-1 

---取字符串長度 
   substr(string,start,number)  number為string長度,start為string起點 
         

---DECODE函數,多重(if,then,else) 
   decode(value,if1,then1,if2,then2,.....,else) 
---判斷’VALUE’是否為空(空值替換) 
   NVL(UALUE,’WKFHZ’)  ’WKFHZ’是為空返回值,不為空則為原值 
---字段長度 
    length(:block_name.item_id) 
---返回字符串的第一(最左)個字符的ascII值 
   ascII(string) 
---多行’VALUE’的   (作用於多’行’) 
    AVG(VALUE)平均值 
    COUNT(VALUE)行數 
    MAX(VALUE)最大值 
    MIN(VALUE)最小值 
    SUM(VALUE)和  
---字符轉換 
    TRANSLATE(STRING,’待轉字符’,’轉換字符’); 
    如  TEANSLATE(’AAABBB’,’AB’,’BA’)  返回’BBBAAA’ 
     
---比較單行中多個列的值獲得最大(’GREATEST’最小(’LEAST’) 
    GREATEST|LEAST(列名,列名,...) 
---按表達式或位置排序  
   ORDER BY ’表達式’OR’位置’ ASC|DESC  ASC’升’,DESC’降’ 默認’ASC’     
*********************************************************************** 
*********************************************************************** 
---游標的屬性 
   (1) %ISOPEN  打開屬性 布爾型 打開為TRUE        
        判斷’光標’是否打開如未打開則打開’光標’ 
        IF NOT(CORSOR_NAME%ISOPEN) THEN 
           OPEN CORSOR_NAME; 
        END IF; 
       FETCH CORSOR_NAME INTO ... 
   (2) %NOTFOUND 布爾型 最近一次’FETC

H’返回無結果 則為TRUE 
          OPEN CORSOR_NAME; 
          LOOP 
               FETCH CORSOR_NAME INTO ...    
               EXIT WHEN CORSOR_NAEM%NOTFOUND; 
          END LOOP; 
   (3) %FOUND 布爾型 最近一次’FETCH’返回無結果 則為FALSE 
         OPEN CORSOR_NAME; 
           
         WHILE CORSOR_NAME%FOUND LOOP 
               ...... 
               FETCH CORSOR_NAME INTO ...  
         END LOOP; 
         CLOSE CORSOR_NAME;  
   (4) %ROWCOUNT NUMVER型 為游標取出的行數 
         OPEN CORSOR_NAME; 
         LOOP 
            FETCH CORSOR_NAME INTO ...  
            EXIT WHEN CORSOR_NAME%ROWCOUNT>5;  
             ......     
         END LOOP;          
         CLOSE CORSOR_NAME;  
           
---

循環語句 
   (1)基本循環 
       LOOP  
        ..... 
       EXIT WHILE; 如(EXIT WHEN X>100) 
       END LOOP; 
   (2)WHILE循環  
       WHILE 如( WHEN X>100) LOOP 
         ..... 
       END LOOP;  >   (3)數值型FOR循環  ’X’為計數器   
       FOR X IN (第減值) Y..Z LOOP 
          ..... 
       END LOOP; 
   (4)游標FOR循環 
        
          
---Exception(例外)在最近的’BEGIN’和’END’之間 
Exception 
       語法1 當’沒有數據找到’時 
       when no_data_found then  
       語法2 當’發生任何錯誤’時 
       when others then  
       語法3 當’發現多行’時 
       WHEN TOO_MANY_ROWS THEN 
       語法4 當’字符向數字轉換失敗’時 
       WHEN INVALID_NUMBER THEN       
       語法5 當’被零除’時 
       WHEN ZERO_DIVIDE THEN  
       語法6 當’向唯一索引中插入重復數據’時 
       WHEN DUP_VAL_ON_INDEX THEN 
       語法7 當’非法游標操作’時 
   &nbsp;   WHEN INVALID_CURSOR THEN 
       語法8 當’數字的,數據轉換,截字符串或強制性的錯誤’時 
       WHEN VALUE_ERROR THEN   
************************************************************************** 
************************************************************************** 
--常用TEXT_IO 
Delcare 
  out_file  text_io.file_type; 
Begin 
  out_file:=text_io.fopen(’prn’,’w’); 
  text_io.new_line(out_file,’ ’); 
  text_io.put_line(out_file,’ ’) 
  text_io.fclose(out_file); 
End; 
---文本輸入輸出 
   TEXT_IO 
   TEXT_IO PACKAGE 
   TEXT_IO FCLOSE 
   TEXT_IO.FILE_TYPE 
   TEXT_IO.FOPEN 
   TEXT_IO.IS_OPEN 
   TEXT_IO.GET_LINE 
   TEXT_IO.NEW_LINE 
   TEXT_IO.PUT 
   TEXT_IO.PUTF 
   TEXT_IO.PUT_LINE 
  USING TEXT_IO CONSTRUCTS 
---------------------------- 
Declare 
     Out_file     Text_io.file_type; 
     L            Varchar2(100); 
     L1           Varchar2(100); 
     L2           Varchar2(100); 
Begin 
    Out_file :=text_io.fopen(’c:lllogin.txt’,’r’); 
    If text_io.is_open(Out_file) then 
    text_io.get_line(Out_file,L); 
    text_io.get_line(Out_file,L1); 
    text_io.get_line(Out_file,

L2); 
    Else 
        Null; 
    End if; 
End;    
---清除全局變量 
   erase(’global.var_name’); 
---隱藏’WINDOW’,’VIEW’,’MENU’ 
   HIDE_WINDOW|VIEW|MENU(WINDOW|VIEW|MENU_name); 
--- 增加參數add_parameter 
Declare 
  pl_id ParamList;  
BEGIN  
  pl_id:=Get_Parameter_List(’tempdata’);  
  IF NOT Id_Null(pl_id) THEN  
     Destroy_Parameter_List(pl_id);  
  END IF;  
  pl_id:=Create_Parameter_List(’tempdata’);  
  Add_Parameter(pl_id,’EMP_QUERY’,DATA_PARAMETER,’EMP_RECS’);  
  Run_Product(REPORTS,’empreport’,SYNCHRONOUS,RUNTIME,  
              FILESYSTEM,pl_id,NULL);  
END;  
--- 
DECLARE 
  lArgs OLE2.LIST_TYPE; 
BEGIN 
  word.hApp:=OLE2.CREATE_OBJ(’Word.Basic’); 
  lArgs:=OLE2.CREATE_ARGLIST; 
  OLE2.ADD_ARG(lArgs,:ole.Word_doc); 
  OLE2.INVOKE(Word.hApp,’fileopen’,lArgs); 
  OLE2.DESTROY_ARGLIST(lArgs); 
END; 
***********************刪除重復記錄************** 
  Delete from emp e 
  where e.rowid > 
&nbsp;  (select min(f.rowid) from emp f 
    4 where f.empno=e.empno); 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved