2014-03-14 33 views
1

我更新在temp_docmeta表xprojecttype並試圖通過包括"d.xproject_id NOT IN"條款忽略我下面的查詢中的所有無效的電話號碼,但它仍然拋出我01722. 00000「無效號碼」。01722. 00000 - <code>"invalid number"</code>錯誤 - 在SQL更新

BEGIN 
    FOR X IN 
    (SELECT projecttype,pid,enddate FROM temp_project 
) 
    LOOP 
    UPDATE temp_docmeta d 
    SET d.xprojecttype  =X.projecttype 
    WHERE d.xproject_id =X.PID 
    AND X.projecttype  IS NOT NULL 
    AND X.enddate   > '10-MAR-14 00.00.00' 
    AND d.xproject_id NOT IN 
     (SELECT TO_NUMBER(xproject_id) 
     FROM temp_docmeta 
     WHERE REGEXP_LIKE(xproject_id, '[^0-9]+') 
    ); 
    END LOOP; 
END ; 

但是,當我用delete語句刪除相同的一組記錄,然後運行上述更新命令,它工作正常。

DELETE 
FROM temp_docmeta 
WHERE xproject_id IN 
    (SELECT xproject_id 
    FROM temp_docmeta 
    WHERE REGEXP_LIKE(xproject_id, '[^0-9]+') 
); 

我不想從我temp_docmeta表中刪除上述記錄,但需要更新temp_docmeta表中第一個查詢。我該怎麼做?

回答

0

您的查詢試圖改變TO_NUMBER所有的值,你不想

也許你應該嘗試

AND d.xproject_id IN 
    (SELECT TO_NUMBER(xproject_id) 
    FROM temp_docmeta 
    WHERE NOT REGEXP_LIKE(xproject_id, '[^0-9]+') 
); 

但要看的順序,TO_NUMBER和REGEXP_LIKE如何做

+0

不,這是行不通的。 –

+0

任何人都可以幫助解決這個問題嗎?或者你可以告訴我一個替代方法來更新我的表中的xprojecttype列。 P.S-當我用delete語句刪除同一組記錄,然後運行上述更新命令時,它工作正常。 –

+0

@PulkitBhatia你嘗試了上面的答案嗎?它給出了任何錯誤?如果沒有錯誤,那是什麼不起作用? – Noel

0

我的更改了X.PID的數據類型,如下所示,to_char,但是,當我將xproject_id的數據類型更改爲「to number」時,它不起作用。奇怪。不是嗎? 或者我錯過了什麼?

BEGIN 
    FOR X IN 
    (SELECT projecttype,pid,enddate FROM temp_PROJECT where projecttype IS NOT NULL 
    AND enddate  > '10-MAR-14 00.00.00' 
    AND PID NOT LIKE '-1' 
) 
    LOOP 
    UPDATE temp_docmeta 
    SET xprojecttype  =X.projecttype 
    WHERE xproject_id =to_char(X.PID) 
    AND xproject_id in 
     (SELECT UNIQUE(xproject_id) 
     FROM temp_docmeta 
     WHERE REGEXP_LIKE(xproject_id, '[0-9]+') 
    ); 
    END LOOP; 
END;