項目中oracle預存程序記錄——常用文法備忘

來源:互聯網
上載者:User

標籤:oracle   預存程序   日期加減   遊標迴圈   

項目中oracle預存程序記錄——常用文法備忘

 

項目中需要寫一個oracle預存程序,需求是收集一個複雜查詢的內容(涉及到多張表),然後把合格記錄插入到目標表中。其中原表之一的日期欄位是timestamp類型,目標表的欄位是varchar2類型;

       其中一些內容很常用,所以做下記錄,供尋找。

1、預存程序的格式

       oracle預存程序和函數都可以實現,一般沒有返回值,則採用預存程序,函數比sqlserver的功能強大。oracle變數定義最好加上首碼如V_,查詢條件中變數名稱和欄位名稱不能重複。

CREATEOR REPLACE PROCEDURE PROC_NAME (

  v_interval IN NUMBER DEFAULT -3 –PARAM_NAME_LIST

)AS

  v_cnt            number(4); -- 定義變數及遊標

BEGIN

--商務邏輯語句

ENDPROC_NAME

 

2、遊標定義和迴圈

cursor  CURSOR_NAME is

              SELECT * FROM DUAL – SELECT 語句;

迴圈遊標有多種方式,最簡單的for方式,避免定義一些變數及開啟、關閉遊標,可以簡化很多代碼,但是如果需要訪問遊標記錄條數,就需要loop或while迴圈。

forloop 文法:

FOR curRow   IN CURSOR_NAME  -- curRow是遊標的行記錄變數

LOOP

--直接通過curRow.遊標欄位取值(省略了變數的定義)

ENDLOOP;

 

3、日期的加減計算

DATE類型是一個7位元組的定寬日期/時間資料類型。它總是包含7個屬性,包括:世紀、世紀中哪一年、月份、月中的哪一天、小時、分鐘和秒;TIMESTAMP類型與DATE非常類似,只不過另外還支援小數秒和時區。下面的N值可以為負數。

 

?  使用NUMTODSINTERVAL內建函數來增加小時、分鐘和秒。

比如:DATE+NUMTODSINTERVAL(n,‘minute‘)

 

?  加一個簡單的數來增加天。

比如:DATE+n

 

?  使用ADD_MONTHS內建函數來增加月和年。

比如:ADD_MONTHS(DATE,n)

 

4、日期類型轉成字元

       select to_char(systimestamp,‘yyyy-mm-dd hh24:mi:ssxff‘)time1 from dual;

       --年月日時分秒及6位毫秒;

       select to_char(systimestamp  ,‘yyyy-mm-dd hh24:mi:ss.ff1‘) from dual;

       --年月日時分秒及毫秒(位元由ff後面的數字決定,1~9之間,ff3表示保留三位毫秒)

 

5、if exist 替代文法

       oracel沒有sqlserver的if exist 文法,只能變形實現,建議使用下面的文法:

v_cnt            number(4); -- 聲明變數;

selectcount(*) into v_cnt from dual where exists (SELECT 語句);

樣本:

declare

  v_cnt number;

begin

  select count(*)  into v_cnt from dual

        where exists (select * from table_namewhere col_name=1);

  if v_cnt = 0 then

dbms_output.put_line(‘無記錄, 在此寫你的業務代碼‘);

endif;

end;

 

6、空值

       如果欄位不允許為空白,使用nvl函數;如:nvl(field_name,’ ’),需要說明的兩個單引號直接是空格,如果沒有任何字元,oracle也視為null。

 

7、調試預存程序

       複雜的業務一般都需要調試,感覺PLSQLDeveloper調試比較方便。右鍵選擇需要調試的預存程序,在測試視窗即可單步調試。


項目中oracle預存程序記錄——常用文法備忘

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.