我正在尝试编写一个小的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位是否缺失。
阿萨弗。
答案 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)