小弟工作不长时间,问一个简单的问题,希望大侠不吝赐教:
由于inser语句不如appen语句效率高,故打算将inser语句换成append语句,但是换成append后编译不通过,不知道pro*c中是否能用append语句呢?我的源代码如下/* 将车牌信息插入到车牌抓拍交易历史交易流水表中 */
EXEC SQL INSERT INTO STS_RUNNINGNUMBER_CM_HIS (JYPPBZ,SBBZ,ZH,DMH,CDH,CFLX,SXJH1,PSSJ1,TXWJM1,SBCPH1,SBCPYS1,
ZXD1,SXJH2,PSSJ2,TXWJM2,SBCPH2,SBCPYS2,ZXD2,CLSJ) VALUES (
:bz,
:cp.sbbz,
TRIM(:cp.zh),
:cp.dmh,
TRIM(:cp.cdh),
:cp.cflx,
TRIM(:cp.sxjh1),
TO_TIMESTAMP(TRIM(:cp.pssj1),'yyyy-mm-dd hh24:mi:ssxff'),
TRIM(:cp.txwjm1),
:cp.sbcph1,
:cp.sbcpys1,
:cp.zxd1,
TRIM(:cp.sxjh2),
TO_TIMESTAMP(TRIM(:cp.pssj2),'yyyy-mm-dd hh24:mi:ssxff'),
TRIM(:cp.txwjm2),
:cp.sbcph2,
:cp.sbcpys2,
:cp.zxd2,
TO_TIMESTAMP(:time1,'yyyy-mm-dd hh24:mi:ssxff'));  按照网上的说法,只将上面的insert换成append,但是我试了,这样不行,请大侠们指教

解决方案 »

  1.   

    你语句是有问题的,Oracle中插入语句肯定是insert至于你说的append提高效率,这要看情况的,看你数据库是什么模式 archivelog还是 noarchivelog,insert语句中增加append主要是减少redo log而已,因此会效率高点
    Noarchivelog(或Nologging)下 :  insert append只产生少量redo。
    archivelog模式下 :insert append产生的和普通insert产生同样的redo,此时的insert append实际上并不会有性能提高语法:
    INSERT/*+ append */ INTO STS_RUNNINGNUMBER_CM_HIS (..........);
      

  2.   

    楼上的语法是正确的,但企业的应用中,肯定会要求在归档模式下的,要不然数据库down了,后就无法恢复了。
    所以实际应用中还是比较重要的,性能能提升好几倍,在上万条数据级别时。在应用中对某个表的插入操作用append和nologging操作会大大提高效率(archived模式下)。