ORACLE PL/SQL練習(二)

一個PL/SQL塊最多由4個不一樣單元組成,只有一個單元是必不可少的。數據庫


塊頭(Header)ide

    只有命名塊纔會有這個單元。塊頭單元就肯定了這個命名塊或者程序的調用方式,事件

    這個單元是可選的。字符串

    

聲明單元(Declaration section)it

    這部分定義變量,遊標,以及能夠被後面的執行單元或異常處理單元引用的子塊。io

    這一單元也是可選的。編譯

    

執行單元(Execution section)class

    這部分包含了PL/SQL引擎在運行時要執行的語句,這個單元是必須的。變量

    

異常處理單元select

    這部分處理的是正常處理過程當中拋出的異常(根據警告和錯誤條件),這一單元也是可選的。

 

匿名塊使用場景:

1.數據庫觸發器

    當一特定事件發生時能夠出發數據庫觸發器,然後者能夠執行匿名塊   

2.即席命令或腳本文件

    在SQL*Plus環境中,手工輸入代碼或腳本執行,腳本中調用匿名塊。

    使用EXECUTE命令。

3.編譯後的3GL程序

 

PL/SQL標示符默認屬性:

1.長度最多有30個字符;

2.必須用字母開始;

3.能夠帶有$,_,#

4.不能帶有任何「空白」字符


直接量:只是一個值

數字:

415,21.6,3,141592654f,7D,NULL

字符串

'This is my sentence','01-OCT-1986',q'!hello!',NULL

時間間隔

INTERVAL '25-6' YEAR TO MONTH,INTERVAL '-18' MONTH,NULL

布爾值

TRUE,FALSE,NULL


TO_DATE('01-OCT-1986','DD-MON-YYYY')

TO_TIMESTAMP_TZ('01-OCT-1986 00:00:00 -6','DD-MON-YYYY HH24:MI:SS TZH')


字符串大小寫敏感

日期格式敏感


NULL的問題


在PL/SQL中給一個VARCHAR2(n)變量賦值一個長度爲0的字符串時,致使的結果就是NULL。

DECLARE

    str VARCHAR2(1) := '';

BEGIN

    IF str IS NULL  THEN          --結果是TRUE

    DBMS_OUTPUT.PUT_LINE('hello');

    END IF;

END;

/


SQL> DECLARE

  2      str VARCHAR2(1) := '';

  3  BEGIN

  4      IF str IS NULL  THEN

  5      DBMS_OUTPUT.PUT_LINE('hello');

  6      END IF;

  7  END;

  8  /

hello

PL/SQL procedure successfully completed



數據庫在處理VARCHAR2類型的表列時也是同樣的。


在PL/SQL中給一個CHAR(n)變量賦值一個長度爲0的字符串時,數據庫會用空格字符填滿這個變量,於是這個變量不爲空。

DECLARE

  flag CHAR(2) := '';

BEGIN

  IF flag IS NULL THEN

    DBMS_OUTPUT.PUT_LINE('great');

  ELSIF flag = '  ' THEN

    DBMS_OUTPUT.PUT_LINE('bad');

  END IF;

END;




SQL> DECLARE

  2    flag CHAR(2) := '';           --用一個長度爲零的字符串給CHAR(2)賦值

  3  BEGIN

  4    IF flag IS NULL THEN          --結果是FALSE

  5      DBMS_OUTPUT.PUT_LINE('great');

  6    ELSIF flag = '  ' THEN         --結果是TRUE

  7      DBMS_OUTPUT.PUT_LINE('bad');

  8    END IF;

  9  END;

 10  /

bad

PL/SQL procedure successfully completed


這種行爲只有在PL/SQL中才能看到。在數據庫中,當咱們要向一個CHAR(n)的列插入長度爲0的字符串時,數據庫不會用空格把列的內容填滿,而是NULL。


可見,ORACLE只是部分知足了ANSI 92和ANSI 99的標準,標準要求一個長度爲零的字符串和NULL字符串必需要有所區別。



在一個直接量字符串中嵌入單引號


要求顯示'hello'字符串,帶上單引號。

在ORACLE 10g以前,咱們必須這樣作:

   

SQL> select '''hello''' from dual;

'''HELLO'''

-----------

'hello'


ORACLE 10g引入了自定義的分隔符,用q來標記咱們的分隔符,而後用單引號把分割表達式包圍起來。

 SQL> select q'['hello']' from dual;

Q'['HELLO']'

------------

'hello'

相關文章
相關標籤/搜索