解决方案 »

  1.   

    通过user_tab_cols,查看该表对应字段上是否存在默认值。。如果没有默认值就很麻烦了。。
    建议还是别递增了,以后的主键都取sys_guid()吧。。
      

  2.   


    不好意思,我不知道如何:通过user_tab_cols,查看该表对应字段上是否存在默认值。 能否在说清楚一些呢。
    我现在可以打开表的设计视图,下图EFID:
      

  3.   


    不好意思,我不知道如何:通过user_tab_cols,查看该表对应字段上是否存在默认值。 能否在说清楚一些呢。
    我现在可以打开表的设计视图,下图EFID:

    应该没有默认值,那么你所说的从sqlserver导入oralce时候不用,我不太明白你是通过什么方式导入的。是通过程序自己写的还是其他的工具。
    另外建议你查看一下表中字段到底是什么样的,是什么样的一个递增主键。
      

  4.   


    不好意思,我不知道如何:通过user_tab_cols,查看该表对应字段上是否存在默认值。 能否在说清楚一些呢。
    我现在可以打开表的设计视图,下图EFID:

    应该没有默认值,那么你所说的从sqlserver导入oralce时候不用,我不太明白你是通过什么方式导入的。是通过程序自己写的还是其他的工具。
    另外建议你查看一下表中字段到底是什么样的,是什么样的一个递增主键。

    我现在就是直接用Navicat for Oracle软件连接到的Oracle数据库上,然后执行Sql语句:
    [code=sql][/
    Insert into TRAIN.ELECTRONFEE
    (
    EFID, YEAR, FEE, DEPTID, USERID, TYPE
    )
    Values
    (
    147929, 2014, 50 , 101 ,  178907 , 2
    )
    code]
    我就是想知道EFID能不能自动来递增,不然就要去获得到最大的EFID值,然后在这个值上面+1,不然就会导致EFID值重复而报错,因为EFID是主键不能重复。
      

  5.   


    不好意思,我不知道如何:通过user_tab_cols,查看该表对应字段上是否存在默认值。 能否在说清楚一些呢。
    我现在可以打开表的设计视图,下图EFID:

    应该没有默认值,那么你所说的从sqlserver导入oralce时候不用,我不太明白你是通过什么方式导入的。是通过程序自己写的还是其他的工具。
    另外建议你查看一下表中字段到底是什么样的,是什么样的一个递增主键。

    我现在就是直接用Navicat for Oracle软件连接到的Oracle数据库上,然后执行Sql语句:
    [/
    Insert into TRAIN.ELECTRONFEE
    (
    EFID, YEAR, FEE, DEPTID, USERID, TYPE
    )
    Values
    (
    147929, 2014, 50 , 101 ,  178907 , 2
    )
    code]
    我就是想知道EFID能不能自动来递增,不然就要去获得到最大的EFID值,然后在这个值上面+1,不然就会导致EFID值重复而报错,因为EFID是主键不能重复。
    可以,创建一个序列,初始化值为目前id的最大值。
    因为oracle不可以直接使用序列的值作为默认值。。所以需要创建触发器来在实现自增。需要的话我可以帮你写。
    建议还是在程序中,
    [code=sql]Insert into TRAIN.ELECTRONFEE
    (
    EFID, YEAR, FEE, DEPTID, USERID, TYPE
    )
    Values
    (
    序列.nextval, 2014, 50 , 101 ,  178907 , 2
    )
      

  6.   


    不好意思,我不知道如何:通过user_tab_cols,查看该表对应字段上是否存在默认值。 能否在说清楚一些呢。
    我现在可以打开表的设计视图,下图EFID:

    应该没有默认值,那么你所说的从sqlserver导入oralce时候不用,我不太明白你是通过什么方式导入的。是通过程序自己写的还是其他的工具。
    另外建议你查看一下表中字段到底是什么样的,是什么样的一个递增主键。

    我现在就是直接用Navicat for Oracle软件连接到的Oracle数据库上,然后执行Sql语句:
    [/
    Insert into TRAIN.ELECTRONFEE
    (
    EFID, YEAR, FEE, DEPTID, USERID, TYPE
    )
    Values
    (
    147929, 2014, 50 , 101 ,  178907 , 2
    )
    code]
    我就是想知道EFID能不能自动来递增,不然就要去获得到最大的EFID值,然后在这个值上面+1,不然就会导致EFID值重复而报错,因为EFID是主键不能重复。
    可以,创建一个序列,初始化值为目前id的最大值。
    因为oracle不可以直接使用序列的值作为默认值。。所以需要创建触发器来在实现自增。需要的话我可以帮你写。
    建议还是在程序中,
    [code=sql]Insert into TRAIN.ELECTRONFEE
    (
    EFID, YEAR, FEE, DEPTID, USERID, TYPE
    )
    Values
    (
    序列.nextval, 2014, 50 , 101 ,  178907 , 2
    )
    多谢,如果我创建一个序列会不会影响之前的程序呢?因为这数据库不是我自己连接,其他人也会往这个数据库中插入数据,我怕我创建完序列之后会影响其他人往里插入数据。
      

  7.   


    不好意思,我不知道如何:通过user_tab_cols,查看该表对应字段上是否存在默认值。 能否在说清楚一些呢。
    我现在可以打开表的设计视图,下图EFID:

    应该没有默认值,那么你所说的从sqlserver导入oralce时候不用,我不太明白你是通过什么方式导入的。是通过程序自己写的还是其他的工具。
    另外建议你查看一下表中字段到底是什么样的,是什么样的一个递增主键。

    我现在就是直接用Navicat for Oracle软件连接到的Oracle数据库上,然后执行Sql语句:
    [/
    Insert into TRAIN.ELECTRONFEE
    (
    EFID, YEAR, FEE, DEPTID, USERID, TYPE
    )
    Values
    (
    147929, 2014, 50 , 101 ,  178907 , 2
    )
    code]
    我就是想知道EFID能不能自动来递增,不然就要去获得到最大的EFID值,然后在这个值上面+1,不然就会导致EFID值重复而报错,因为EFID是主键不能重复。
    可以,创建一个序列,初始化值为目前id的最大值。
    因为oracle不可以直接使用序列的值作为默认值。。所以需要创建触发器来在实现自增。需要的话我可以帮你写。
    建议还是在程序中,
    [code=sql]Insert into TRAIN.ELECTRONFEE
    (
    EFID, YEAR, FEE, DEPTID, USERID, TYPE
    )
    Values
    (
    序列.nextval, 2014, 50 , 101 ,  178907 , 2
    )
    多谢,如果我创建一个序列会不会影响之前的程序呢?因为这数据库不是我自己连接,其他人也会往这个数据库中插入数据,我怕我创建完序列之后会影响其他人往里插入数据。如果是这样的话,我建议你还是不要用序列了。。直接使用oracle自带的sys_guid()吧。
    能保证唯一性。。否则万一别人有自己的序列,别的程序就会报错了。。
      

  8.   

    oracle中没有自增字段,都是用sequence代替的。
    主键不能重复,其他人要插入数据应该也是用sequence的,建议和别人统一一下,全用一个sequence。
      

  9.   


    第一次用oracle,与sql server还是有挺多不同的。多谢