Oracle

时间:2016-05-21 18:30:02

标签: sql oracle constraints

我从Oracle查询的角度看下面的查询是我在表BOA_INVOICE上创建了一个约束,如下所示

ALTER TABLE BOA_INVOICE 
   ADD CONSTRAINT CK_INVOICE_SOURCE_SYSTEM 
       CHECK (SOURCE_SYSTEM IN ('PCE', 'PDS', 'WALLSTREET', 'SYSTEM X & ECOTRADE'));

现在为表BOA_INVOICE成功添加了此约束,但问题是当我在Oracle开发人员中看到约束定义时,它显示如下所示

SOURCE_SYSTEM IN ('PCE', 'PDS', 'WALLSTREET', 'SYSTEM X null') 

现在,当我仔细观察最后一个值是SYSTEM X & ECOTRADE但是在oracle开发人员的约束定义中我可以看到它显示为 SYSTEM X null

请告知如何在约束定义

中将其更正为SYSTEM X & ECOTRADE

1 个答案:

答案 0 :(得分:0)

问题不在于Oracle本身 - 它的SQL * Plus。 &用于告诉SQL * Plus您正在命名参数,并且它在字符串中的存在会使SQL * Plus感到困惑。

有两种解决方法。首先,您可以使用SET DEFINE OFF告诉SQL * Plus您没有使用命名参数,它应该只对待&像任何其他角色一样。

另一种方法是将&作为字符串中的最后一个字符,然后将字符串的其余部分连接到第一个字符串,如

ALTER TABLE BOA_INVOICE 
   ADD CONSTRAINT CK_INVOICE_SOURCE_SYSTEM 
       CHECK (SOURCE_SYSTEM IN ('PCE', 'PDS', 'WALLSTREET', 'SYSTEM X &' || ' ECOTRADE'));

祝你好运。