1

我有一个表,有时会更新缺少“0”或多个连续零的记录。记录长度应为小数点后 8 位(共 10 个字符)。

例如 - 最初看起来像 1.12345600 的记录最终会像 1.123456

我制作了一个脚本来检查所有记录的长度,并在每条短于 10 个字符的记录中添加一个“0”。

问题是它只添加了一次“0”。上面的例子看起来像 1.1234560 而不是我想要的 1.12345600。这是脚本:

DECLARE

       CURSOR dif IS
            SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
            FROM project1;


BEGIN

        FOR a in dif LOOP

            IF LENGTH (a.CUST_CODE)<10
            THEN
            UPDATE project1
            SET CUST_CODE=a.CUST_CODE||'0'      
            WHERE CUST_CODE=a.CUST_CODE;
            END IF;
        END LOOP;
        commit;

END;

完成运行后,会添加一个“0”。如果我再次运行该脚本,它将在任何仍短于 10 个字符的记录中添加另一个“0”。包含 7 个字符的记录需要第三次运行。

我猜应该在某个地方有另一个循环来继续检查记录,直到它都达到所需的长度。任何想法?

4

5 回答 5

3

如果我是你,我会用一个声明来做。

UPDATE project1 SET CUST_CODE=rpad(CUST_CODE, 10, '0');
于 2012-12-04T13:01:16.140 回答
3

您可以使用 rpad 功能:http ://www.techonthenet.com/oracle/functions/rpad.php (链接中的第三个示例是您想要的)。

 SET CUST_CODE=rpad(a.CUST_CODE, 10, '0')
于 2012-12-04T12:23:12.757 回答
0

您可以使用 rpad 来解决您的问题!下面遵循参考文档。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions140.htm

于 2013-10-23T17:21:04.880 回答
0

如果你想用上面给出的 SQL 来实现它是最好的方法,但是你想通过 PLSQL 来实现它,你需要更正你的逻辑。您正在为游标中的记录数运行循环,然后在每个记录后面附加一个单零,即“0”,这正是您在代码中编写的内容。

如果您希望它长度为 10,则按如下方式实现它。

             IF LENGTH (a.CUST_CODE)<10
        THEN
        v_len = 10-length (a.cust_code-- declare a variable
        for 
        i in 1..v_len
        loop
        v_pad=v_pad||'0';
        end loop;
        UPDATE project1
        SET CUST_CODE=a.CUST_CODE|| v_pad      
        WHERE CUST_CODE=a.CUST_CODE;
        END IF;

希望这将帮助您在 PLSQL 中实现

于 2013-07-26T10:05:34.290 回答
0
DECLARE

       CURSOR dif IS
            SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
            FROM project1;
v_temp number;

BEGIN

        FOR a in dif LOOP
v_temp := 10-LENGTH (a.CUST_CODE)
            IF LENGTH (a.CUST_CODE)<10
            THEN
            UPDATE project1
            SET CUST_CODE=RPAD(a.CUST_CODE,v_temp,'0') ;
            WHERE CUST_CODE=a.CUST_CODE;
            END IF;
        END LOOP;
        commit;

END;

您可以使用上面的查询

于 2014-01-19T14:00:20.677 回答