2012-12-02 49 views
1

我想寫一個小的pl/sql腳本,需要一些幫助。首先,我有兩個表稱爲project1,project2。這兩個表都有一個名爲cust_code的列。substr on pl/sql

cust_code的值是varchar2類型。值始終以1開頭(數字1,小數點)和8位數字。例如1.10002332

當我將數據導入到project1表中時,如果最後一位數字爲0,例如1.22321630,則會丟棄最後一個零,然後只有超過小數點的七位數字。在這種情況下,它將是1.2232163

我想要寫的腳本將檢查是否只有7位數字超出小數點並將該記錄插入到project2表中。 這是我想出了

DECLARE 

     CURSOR dif IS 
      SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
      FROM project1 
      WHERE CUST_CODE IN (SELECT CUST_CODE FROM CUST_ALL); 

BEGIN 

     FOR a in dif LOOP 

      IF SUBSTR(a.CUST_CODE, 10)=null 
      THEN 
      INSERT INTO project2 (cust_code) 
      VALUES(a.CUST_CODE);   
      END IF; 
     END LOOP; 
     commit; 

END; 

腳本沒有任何錯誤運行,但沒有任何反應。在substr函數上,當我選擇不同於NULL的值時,它就起作用了。我無法弄清楚如何檢查第8位數字是否丟失。

Assaf。

+0

在PLSQL'東西= null'永遠是假的,你需要'東西是空的' –

+2

@ABCade:我認爲它幾乎是任何SQL,而不僅僅是PL/SQL。 :) – Neolisk

+0

@Neilisk,感謝您的評論,您當然對 –

回答

1

腳本不必因爲該行的工作:

IF SUBSTR(a.CUST_CODE, 10)=null 

在plsql <something> = null將始終爲FALSE。 你應該寫:

IF SUBSTR(a.CUST_CODE, 10) IS null 

但實際上你真的不NEAD PLSQL,你可以用一個SQL命令做到這一點:

INSERT INTO project2 (cust_code) 
SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
      FROM project1 
      WHERE CUST_CODE IN (SELECT CUST_CODE FROM CUST_ALL) 
       AND SUBSTR(a.CUST_CODE, 10) IS null; 
+0

謝謝!IS null確實有所作爲 我試着學習pl/sql,而這個特定的小腳本只是稍微大一點的開始,在工作中的幾件事更容易。再次感謝(: – Shlomix

0

試試這個你的病情:

IF LENGTH(a.CUST_CODE) = 10 AND SUBSTR(a.CUST_CODE,-1,10) = '0' 

(檢查,如果長度爲10,並最後一個字符爲0)

+0

非常感謝。不知道LENGTH函數是非常有用的(: – Shlomix