1

我正在尝试编写一个小的 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 位是否丢失。

阿萨夫。

4

2 回答 2

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;
于 2012-12-02T14:58:03.300 回答
0

根据您的情况试试这个:

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

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

于 2012-12-02T14:56:52.467 回答