EXEC SQL SELECT USERID, LOGDATE INTO :_USERID , :_LOGDATE FROM D_TABLE
WHERE USERID = :_ulUserID AND LOGDATE = TO_DATE(:_szDate, 'YYYY-MM-DD')会出现-2112的错误,是因为数据库中有两条用户和日期一样的数据。但是我写数据库的时候是没有插入,有则追加,而且是单线程操作的,为什么会出现重复的记录呢,想不通,望大侠救我!!

解决方案 »

  1.   

    插入了重复数据的可能性很多,你应该从可能的地方都跟踪一下。也可以在表上创建唯一约束:
    alter table D_TABLE add constraint ud_unique unique(USERID,LOGDATE);防止类似的错误出现
      

  2.   

    先把你的SQL放上条件在PL/SQL中执行下,看看是不是有多条记录出现或者没有数据,如果检查不出问题的话,在程序中写个检查语句
    EXEC SQL SELECT count(1) into :num_count FROM D_TABLE
    WHERE USERID = :_ulUserID AND LOGDATE = TO_DATE(:_szDate, 'YYYY-MM-DD')dbms_output.putline(num_count);
    看下打印出来的是不是1,如果不是1,是数据问题,如果是1那就应该没问题,看下是不是为0,如果没有数据取出来,也会报错的
      

  3.   

    数据库语言和其他语言一样 都要有容错机制的
    你可以先把count(*)查出来 判断一下 防止结果为空的情况
    然后加上rownum=1 防止多条记录的情况你这样 啥也不判断 报错的可能性很大