pl / sql上的substr

时间:2012-12-02 14:46:06

标签: oracle plsql substr

我正在尝试编写一个小的pl / sql脚本,需要一些帮助。 首先,我有2个名为project1,project2的表。两个表都有一个名为cust_code的列。

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位是否缺失。

阿萨弗。

2 个答案:

答案 0 :(得分:1)

由于以下行,您的脚本无效:

IF SUBSTR(a.CUST_CODE, 10)=null

在plsql <something> = null中始终为FALSE。 你应该写:

IF SUBSTR(a.CUST_CODE, 10) IS null

但实际上你并不是真的没有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;

答案 1 :(得分:0)

根据您的情况尝试:

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

(检查长度是否为10,最后一个字符是否为0)