您的位置:首页 > 数据库

PL/SQL 数据类型和变量 -- 字符

2014-12-21 23:34 441 查看
-- Start

PL/SQL 支持 SQL 的字符数据类型,除此之外,它还定义了自己的子类型。有关 SQL 字符数据类型,参见此处

DECLARE
    -- CHAR 数据类型
    TEST1 CHAR(10) := 'test1';

    -- CHARACTER 是 CHAR 的子类型
    TEST2 CHARACTER(10) := q'(test2)';
    
    -- VARCHAR2 数据类型
    TEST3 VARCHAR2(10) := Q'(test3)';
    
    -- STRING 是 VARCHAR2 的子类型
    TEST4 STRING(10) := q'/test4/';
        
    -- VARCHAR 是 VARCHAR2 的子类型
    TEST5 VARCHAR(10) := Q'<test5>';
    
    -- CHARACTER VARYING 是 VARCHAR 的子类型
    TEST6 CHARACTER VARYING(10) := q'[test6]';

    -- CHAR VARYING 是 VARCHAR 的子类型
    TEST7 CHAR VARYING(10) := Q'{test7}';
    
    -- NCHAR 数据类型
    TEST8 NCHAR(10) := n'test8';
    
    -- NATIONAL CHAR 是 NCHAR 的子类型
    TEST9 NATIONAL CHAR(10) := N'test9';
    
    -- NATIONAL CHARACTER 是 NCHAR 的子类型
    TEST10 NATIONAL CHARACTER(10) := nq'*test10*';
   
    -- NVARCHAR2 数据类型
    TEST11 NVARCHAR2(10) := NQ'?test11?';
    
    -- ROWID 是 VARCHAR2 的子类型
    TEST12 ROWID := 'AAAFC3AAEAAAAUOAAA';
    
    -- UROWID 数据类型
    TEST13 UROWID(10) := 'AAAFC3AAEAAAAUOAAA';
    
    -- MLSLABEL 数据类型
    TEST14 MLSLABEL := 'TEST14';    
    
    -- LONG 数据类型
    TEST15 LONG(10) := 'TEST15';
    
    -- RAW 数据类型
    TEST16 RAW(10) := '1010';
    
    -- LONG RAW 数据类型
    TEST17 LONG RAW(10) := '101010';

BEGIN
    DBMS_OUTPUT.PUT_LINE('TEST1=*' || TEST1 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST2=*' || TEST2 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST3=*' || TEST3 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST4=*' || TEST4 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST5=*' || TEST5 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST6=*' || TEST6 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST7=*' || TEST7 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST8=*' || TEST8 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST9=*' || TEST9 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST10=*' || TEST10 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST11=*' || TEST11 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST12=*' || TEST12 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST13=*' || TEST13 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST14=*' || TEST14 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST15=*' || TEST15 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST16=*' || TEST16 || '*');
    DBMS_OUTPUT.PUT_LINE('TEST17=*' || TEST17 || '*');
END;
/


如果你要比较 CHAR 和 VARCHAR2 类型的变量,要格外小心,因为 CHAR 是填补了空格的。

DECLARE
    TEST1 CHAR(10) := 'test1';
    TEST2 VARCHAR2(10)  := 'test1';
BEGIN
  -- 由于 CHAR 填补了空格,下面的比较方式是不对的
  -- 应该使用 RTRIM(TEST1) = TEST2
  IF TEST1 = TEST2 THEN
    DBMS_OUTPUT.PUT_LINE('TEST1=TEST2');
  ELSE
    DBMS_OUTPUT.PUT_LINE('TEST1<>TEST2');
  END IF;
END;
/


--更多参见:Oracle PL/SQL 精萃

-- 声明:转载请注明出处

-- Last Edited on 2015-01-01

-- Created by ShangBo on 2014-12-21

-- End
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: