2014-12-04 18 views
0

这是一个相当基本的问题,抱歉,我只是这样做了几个星期。我们的任务是在Erwin生成我们的模型后,在Oracle和Access中创建一个数据库。该模型已在Erwin中创建,我们直接从Erwin生成SQL代码以在Oracle中输入。现在我试图修改代码,将其输入到Access (changing VARCHAR2 to VARCHAR, NUMBER to INTEGER etc)中。然而,我遇到了一致性错误带来的很多麻烦。从Erwin输入代码时遇到的问题(主要是数据类型)

下面是SQL代码的一部分(有21个类似的表)

CREATE TABLE ASSUMPTION 
(
    ASSUMPTION_ID  NUMBER(25) NOT NULL , 
    COUNTY    VARCHAR2(23) NOT NULL , 
    CLAIM_HISTORY  VARCHAR2(200) NULL , 
    ADDITIONAL_PROPERTY VARCHAR2(200) NULL , 
    REBUILD_COST   DECIMAL(6,2) NULL , 
    MAIN_RESIDENCE  VARCHAR2(3) NOT NULL , 
    CURRENT_INSURANCE_COVER VARCHAR2(200) NULL , 
    CRIMINAL_HISTORY  VARCHAR2(200) NULL , 
    BUSINESS_USE   VARCHAR2(3) NOT NULL , 
    CUSTOMER_ACCEPTANCE VARCHAR2(3) NOT NULL , 
    QUOTE_ID    NUMBER(25) NOT NULL 
); 



ALTER TABLE ASSUMPTION 
    ADD CONSTRAINT XPKASSUPMTION PRIMARY KEY (ASSUMPTION_ID,QUOTE_ID); 

我已使其这样

CREATE TABLE ASSUMPTION 
(
    ASSUMPTION_ID  INTEGER(25) NOT NULL , 
    COUNTY    VARCHAR(23) NOT NULL , 
    CLAIM_HISTORY  VARCHAR(200) NULL , 
    ADDITIONAL_PROPERTY VARCHAR(200) NULL , 
    REBUILD_COST   CURRENCY NULL , 
    MAIN_RESIDENCE  VARCHAR(3) NOT NULL , 
    CURRENT_INSURANCE_COVER VARCHAR(200) NULL , 
    CRIMINAL_HISTORY  VARCHAR(200) NULL , 
    BUSINESS_USE   VARCHAR(3) NOT NULL , 
    CUSTOMER_ACCEPTANCE VARCHAR(3) NOT NULL , 
    QUOTE_ID    INTEGER(25) NOT NULL 
); 

随后在相同

的变化
ALTER TABLE ASSUMPTION 
    ADD CONSTRAINT XPKASSUPMTION PRIMARY KEY (ASSUMPTION_ID,QUOTE_ID); 

如果有人能指出我要出错的地方,我会很感激。它始终返回一个语法错误。

此外,有必要在'customer_acceptance框'中要求接受或'是',以便他们继续访问表单的其余部分。我应该试图在这个最初的假设框中指定吗?是否可以直接拿起Erwin文件并直接在Oracle或Access中打开它包含的代码,或者自动而不是手动转换它?

谢谢。

+0

你认为整数(25)是什么意思?你认为这对MS Access意味着什么? – 2014-12-04 13:44:33

+0

我认为它的意思与SQL代码类似 - 你不能输入超过25个数字,在这种情况下,25个整数,因为我不需要小数。我可以跳过每一位大小的描述 - 即INTEGER(25)变成INTEGER和VARCHAR(50),只是VARCHAR? – Maki 2014-12-04 13:50:26

+0

在标准SQL中没有'integer(25)'这样的东西。在Access中,'integer'是一个16位整数,对于你来说不够大。我不确定Access的'decimal'数据类型是否包含足够的数字。 – 2014-12-04 14:38:08

回答

0

这里有很多事情要做。

首先是整数(25)字段。这些是ID字段,因此可能是非易失性的。我建议您将这些字段更改为仅限数字域的文本(25)。这样你将避免不同平台之间的可比性问题。一个侧面的问题,它真的需要这么大吗?如果是这样,你可能要考虑使用UUID。这会给你一个16位的文本值:

  • 具有较大的范围内,那么整数(25)
  • 是相当多的保证是唯一跨平台

其次,它看起来像你正试图手动更改生成的Oracle代码。我建议您改为回到模型中,更改目标数据库以访问,然后为您正确设计访问代码。

我希望这会有所帮助,祝你好运。