表A中有一个字段AID ,表B中也有一个字段BID,其中, 'ABC' + A.AID = B.BID 怎么添加这个约束呢?

解决方案 »

  1.   

    BID存成AID,做为外键。
    'ABC' 做为系统常量,取出时'ABC' || BID即可。
      

  2.   

    你可以在A表中添加一个列,列名为aa,列值为'ABC' || a.aid,然后在这个列上加一个unique约束,然后,B表中添加一个外键约束reference to a(aa),这样就可以完成你的要求了
      

  3.   

    順便幫樓主問一下:
    如果要在A表中添加一個列,此列的值限定為'ABC'||A.AID,這樣的列該如何加呢?我知道在SQL SERVER中添加一個計算列就可以了,但在Oracle中該如何實現呢?還望有大俠指教!!
      

  4.   

    不理解  waterfirer(水清) 是什么意思
    但觉得  zealot_zk(风中追风) 是方法是可以的.另外 zjp8310(z一阵风z) ,为添加的列添加一个约束 ('ABC' || A.AID ),默认值为 ('ABC' || A.AID ),即可.不知在 SQL SERVER 中添加计算列怎么添加?
      

  5.   

    刚试了一下,默认值 为 ( 'ABC' || A.AID ) ,不知怎么加??
      

  6.   

    可以在A表中新增一个字段 B,用触发器实现 B='ABC' || A.AID 
    不能直接在字段定义中设置
    SQL> ALTER TABLE TEST.TT MODIFY B DEFAULT 'ABC' || A;
    ALTER TABLE TEST.TT MODIFY B DEFAULT 'ABC' || A
                                                  *
    ERROR 位于第 1 行:
    ORA-00984: 列在此处不允许
      

  7.   

    在SQL SERVER中我要創建這樣一個表:
    表A中有一个字段AID、C1,其中C1的值為字串'ABC'連上AID的值,也就是說,無論何時,C1的值總是'ABC'+AID,這種方式在SQL SERVER中相當容易實現,而且以後表A中添加數據時,隻要指定AID的值即可,C1字段的值會自動被插入(正因為可以自動插入,所以插入數據時不允許指令C1列值),如,我插入下面一列值到表A中:
    INSERT INTO 表A VALUES('XXXX');--不允許使用INSERT INTO 表A VALUES('XXXX','ABC'+'XXXX');
    插入後我再查詢:
    SELECT * FROM 表A;
    這時顯示的數據就是:
    AID      C1
    ----    ----
    XXXX    ABCXXXX
    可以看到C1列值被自動設置為'ABC'+AID了(而且不允許插入時指定它的值),這種效果在Oracle中該如何實現呢?難道隻有通過觸發器的方式嗎?要是這樣的話,那真的比SQL SERVER還差了!!!
      

  8.   

    不理解  waterfirer(水清) 是什么意思
    ------
    我是说可以不用添加一列。因为'ABC'是一常量,取出来的时候用拼串的方式拼上完全可以满足需求。系统可以建这样一个表,将'ABC'这样的常量存起来,便于维护。
      

  9.   

    总结一下, 
    waterfirer(水清)的方法是可行的.^_^
    zealot_zk(风中追风) 的方法中,添加的 'ABC' || a.aid  方法,在 Oracle 中试不通.可以不行.另外,我还有一个触发器的问题,再开一贴,高手请进看看:http://community.csdn.net/Expert/topic/4469/4469345.xml?temp=5.891055E-02