我觉得我弄错了

时间:2016-10-16 07:13:19

标签: sql database oracle

佣金分类列应该能够存储最大值为99的整数,并命名为uniqueString(subscription().subscriptionId)。如果在添加行时未提供任何值,则Comm_id列的值应自动设置为10。优势代码列还应包含最大值为99的整数值,并命名为Comm_id

Ben_id

我不知道这是否正确

3 个答案:

答案 0 :(得分:2)

alter table ACCTMANAGER add(Comm_id number(2)default 10,Ben_id number(2));

基本上对于数字数据类型,您具有精度和比例。如果未指定scale,则scale为0,表示数字后没有小数位。 number(2)表示此处最多只能存储两位数字,如果未指定column,则default关键字会自动设置该值。

BTW尝试使用oracle文档来完成这个家庭作业类型的东西。这是一个很好的例子。

https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i16209

EDITED 的 alter table ACCTMANAGER add(Comm_id number(2)default 10 constraint lowchk1 check(comm_id> = 0),ben_id number(2)constraint lowchk2 check(ben_id> = 0));

很抱歉,我无法检查语法,因为我没有在家安装Oracle。我只在办公室工作。

答案 1 :(得分:0)

@MSStp提供了一个很好的答案,但您仍然需要约束来确保您不会在表格中获得错误的数据(例如负数)。如果约束是佣金和利益列必须包含0到99之间的整数,并且您希望确保Oracle不接受2.2的输入(它将在MS的解决方案中接受,它将只是截断它在数据库中为2并存储2),你需要添加约束,正如Abdul Rehman Sayed在你的问题评论中所建议的那样。

alter table acctmanager
    add ( comm_id number(2) default 10 
                    constraint check_comm ( comm_id >= 0 and comm_id = trunc(comm_id) ),
          ben_id  number(2) 
                    constraint check_ben  ( ben_id  >= 0 and ben_id  = trunc(ben_id) )
        )
;

然而:只是一个想法.....什么是comm_idben_id?如果它们是特定佣金和利益描述/等级/等等的某种代码,您真的需要检查约束吗?您是否有不同的表格解释这些代码,其中comm_idben_id是(或应该是)主键?在这种情况下,您需要外键约束,而不是检查约束?

答案 2 :(得分:0)

Function getTitle(ByVal abbrev As String) As String
'Purpose: return full name/caption of security abbreviation
Select Case UCase(abbrev)
    Case vbNullString
         getTitle = "Fixed Deposits and Bonds"
    Case "GB":  getTitle = "Government Bonds"
    Case "CFD": getTitle = "Corporate Fixed Deposits"
    Case "TSB": getTitle = "Tax Saving Bonds"
    Case Else:  getTitle = "All Other"
End Select
End Function

此后,您可以看到表已更改。

要查看输出,请输入以下内容:

ALTER TABLE ACCTMANGER ADD(Comm_id NUMBER(2) DEFAULT 10 NOT NULL, Ben_id NUMBER(2));

您将看到整个表以及更新的列。