我现在有一个表,表名叫做company
NAME                 ADDRESS               CITY      STATE
------------------   ------------          --------  ----------
AA                  ZZ                    RR        CN表中各个字段类型:(DESC COMPANY)
名称                      是否为空                  类型
---------------------------------------------------
NAME                                         CHAR(30)
ADDRESS                                      CHAR(50)
CITY                                         CHAR(30)
STATE                                        CHAR(5)
我现在为它创建一个视图
CREATE VIEW ENVELOPE(NAME,MAIL_DADRESS) AS
SELECT NAME,ADDRESS+' '+CITY+' '+STATE
FROM COMPANY;
创建的视图是成功的,但是我只要一用SELECT * FROM ENVELOPE;
就会提示无效数字。
后来我使用DESC ENVELOPE;查看发现
名称         是否为空        类型
-------------------------------
NAME                     CHAR(30)
MAIL_ADDRESS             NUMBER
为什么使用+号联合了以后MAIL_ADDRESS会变成NUMBER类型?
如果SELECT NAME,ADDRESS+' '+CITY+' '+STATE
改成SELECT NAME,ADDRESS+" "+CITY+" "+STATE
则视图都创建不了。
请问为什么呢?困扰一下午了,我是初学者望大家不吝赐教谢谢。

解决方案 »

  1.   

    oracle 联合字符串用 ||ADDRESS||' '||CITY||' '||STATE
      

  2.   

    ok,谢谢了,终于明白了嘿嘿,不知道你还会看这个帖子不会,我还想问一下怎么消除联合以后的字符串之间的空格呢?是不是使用VARCHAR2就行了啊,放心还是会给满分的。
      

  3.   

    用函数replace将空格删除SELECT NAME,replace(ADDRESS||' '||CITY||' '||STATE,' ','') FROM COMPANY;
      

  4.   

    这位兄弟说的是一个方法,但是如果ADRESS CITY STATE这些字段中有空格的话也会被替换掉,所以我觉得还是用varchar2好一点
      

  5.   

    CREATE VIEW ENVELOPE(NAME,MAIL_DADRESS) AS
    SELECT NAME,ADDRESS||' '||CITY||' '||STATE
    FROM COMPANY;
    连接符号是||  
      

  6.   

    是的,用 varchar2 ,在填充字符串时不会自动在其后添加空格。
     
    如果表中已经是 char 类型,可以用 rtrim(ADDRESS) 函数消除字符串后面的空格。