Loops PLSQL和循环

Loops PLSQL和循环,loops,plsql,nested,Loops,Plsql,Nested,我有一个表,它有时会更新缺少“0”或几个连续零的记录。记录长度应超过小数点后8位(共10个字符) 例如,一个最初看起来像1.12345600的记录最终会变成1.123456 我制作了一个脚本,检查所有记录的长度,并在每个短于10个字符的记录中添加一个“0” 问题是它只添加一次“0”。上面的示例看起来像1.1234560,而不是我想要的1.12345600。 以下是脚本: DECLARE CURSOR dif IS SELECT CUST_CODE, CUS

我有一个表,它有时会更新缺少“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;
声明
光标dif为
选择客户代码、客户ID、合同编号、MSISDN
来自项目1;
开始
对于dif循环中的

如果LENGTH(a.CUST_CODE)您可以使用rpad函数:(链接中的第三个示例就是您想要的)


您可以使用rpad函数:(链接中的第三个示例就是您想要的)


如果我是你,我会用一句话来表达

UPDATE project1 SET CUST_CODE=rpad(CUST_CODE, 10, '0');

如果我是你,我会用一句话来表达

UPDATE project1 SET CUST_CODE=rpad(CUST_CODE, 10, '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;

IF LENGTH(a.CUST_code)如果您想用上面给出的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;

如果长度(a.CUST_code)您可以使用rpad解决您的问题!下面是参考文档。

您可以使用rpad解决您的问题!下面是参考文档。
声明
光标dif为
选择客户代码、客户ID、合同编号、MSISDN
来自项目1;
v_温度编号;
开始
对于dif循环中的
v_温度:=10长度(a.CUST_代码)
如果长度(a.CUST_代码)声明
光标dif为
选择客户代码、客户ID、合同编号、MSISDN
来自项目1;
v_温度编号;
开始
对于dif循环中的
v_温度:=10长度(a.CUST_代码)

如果长度(a.CUST_代码)非常感谢!非常感谢!非常有用的函数(:谢谢。确实更简单。我尝试练习plsql,所以利用任何机会来写东西,尽管我似乎最好先关注sql…谢谢。谢谢。确实更简单。我尝试练习plsql,所以利用任何机会来写东西,尽管我似乎最好先关注sql…谢谢。没有恶魔关于如何使用rpad的分层这只是一个评论,不是一个答案。没有关于如何使用rpad的演示,这只是一个评论,不是答案。