我在pl/sql developer里面执行
INSERT INTO PRODUCTION(OPERATIONID,STARTDATE,ENDDATE,PRODUCTIONQUANTITY,UNITOFMEASURECODE,DEACTIVATE,IMPORTID,SOURCEID,LASTMODIFIEDDATE,USER01NUMBER,USER02NUMBER,USER03NUMBER,USER01FIELD,USER02FIELD,USER03FIELD)  
    (SELECT OPERATION.OPERATIONID, V_PRODUCTION .STARTDATE, V_PRODUCTION .ENDDATE, V_PRODUCTION .PRODUCTIONQUANTITY, V_PRODUCTION .UNITOFMEASURECODE, V_PRODUCTION .DEACTIVATE, V_PRODUCTION .IMPORTID, V_PRODUCTION .SOURCEID, V_PRODUCTION .RUNDATE, V_PRODUCTION .USER01NUMBER, V_PRODUCTION .USER02NUMBER, V_PRODUCTION .USER03NUMBER, V_PRODUCTION .USER01FIELD, V_PRODUCTION.USER02FIELD, V_PRODUCTION .USER03FIELD 
    FROM V_PRODUCTION 
    inner join OPERATION on OPERATION.operationcode = V_PRODUCTION .OperationCode
    );
    commit;V_PRODUCTION 是一个视图,问题是这条语句执行了好长时间都不结束,select语句单独执行是成功的,而且就7条数据这是为什么?本人刚刚从sqlserver转过来,不是特别清楚啊,谢谢

解决方案 »

  1.   

    试试
    create table PRODUCTION_test
        (SELECT OPERATION.OPERATIONID, V_PRODUCTION .STARTDATE, V_PRODUCTION .ENDDATE, V_PRODUCTION .PRODUCTIONQUANTITY, V_PRODUCTION .UNITOFMEASURECODE, V_PRODUCTION .DEACTIVATE, V_PRODUCTION .IMPORTID, V_PRODUCTION .SOURCEID, V_PRODUCTION .RUNDATE, V_PRODUCTION .USER01NUMBER, V_PRODUCTION .USER02NUMBER, V_PRODUCTION .USER03NUMBER, V_PRODUCTION .USER01FIELD, V_PRODUCTION.USER02FIELD, V_PRODUCTION .USER03FIELD 
        FROM V_PRODUCTION 
        inner join OPERATION on OPERATION.operationcode = V_PRODUCTION .OperationCode
        );
    如果这样快了,检查PRODUCTION表里是否有锁.
    如果这样速度也慢,检查select count(1)     FROM V_PRODUCTION 
        inner join OPERATION on OPERATION.operationcode = V_PRODUCTION .OperationCode
    确认查询出来的结果的确是7,再检查下optimizer_mode参数值,看设置成CHOOSE会不会快一些。
      

  2.   

    应该是锁的问题
    请问,当创建好一个用户后,并且创建了一个新的表,是不是oracle就自动地给该表赋予了锁的功能,因为我查看了一下我的项目的之前的创建数据库的脚本,好像没有什么特别的比如类似create table的语句,请回答,谢谢我如何操作,会导致我上面问题的出现呢?
      

  3.   


    锁的发生情况很多....比如,某一个事务正在修改这个表的数据,另外一个事务也要修改这个表的数据.
    比如,你某个同事SELECT * FROM XXX FOR UPDATE,你也恰好在执行UPDATE XXX SET 
    比如,在某个过程中,正在UPDATE ,恰好,你也在UPDATE
    这些都可能会导致加锁.
    这个是我之前的一篇模拟加锁的小测试:
    http://blog.csdn.net/ziwen00/article/details/6331037试一下,就很明白了.
      

  4.   

    可以join v$Lock v$Lock 获得谁在block谁
            select a.sid ||' is blocking '||b.sid from v$lock a,v$Lock b where a.id1=b.id1 and a.id2=b.id2 and a.block=1 and b.request>0;