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'

相关文章
相关标签/搜索