2014-12-04 39 views
1

在我的PL sql while循环我试图改变一个数字的长度,这也改变了我的while循环基于while循环的值的长度停止工作。该代码是通过采取每一个步骤如下PLSQL当试图改变长度的值while循环给出错误

CREATE OR REPLACE FUNCTION neemrest(restnumber number) 
RETURN NUMBER 
AS 
partrest NUMBER; 
afternumber NUMBER; 
BEGIN 
WHILE LENGTH(TO_CHAR(restnumber))>9 LOOP 
partrest := TO_NUMBER(SUBSTR(restnumber,1,10)); 
afternumber := TO_NUMBER(SUBSTR(restnumber,11,20)); 
restnumber := partrest||afternumber; 
END LOOP; 
RETURN MOD(restnumber,64); 
END; 

现在seperatly我发现问题胡说在while循环的最后一行

restnumber := partrest||afternumber; 

现在我的问题我怎样才能改变的lenght我数量,同时不打破while循环,因为这对我的功能至关重要。和我的功能的使用

回答

1

您遇到的问题是,您正尝试将值分配给只读参数。

你应该修改你的函数是这样的:

CREATE OR REPLACE FUNCTION neemrest(restnumber in out number) 
RETURN NUMBER 
AS 
partrest NUMBER; 
afternumber NUMBER; 
BEGIN 
    WHILE LENGTH(TO_CHAR(restnumber))>9 LOOP 
     partrest := TO_NUMBER(SUBSTR(restnumber,1,10)); 
     afternumber := TO_NUMBER(SUBSTR(restnumber,11,20)); 
     restnumber := partrest||afternumber; 
    END LOOP; 
RETURN MOD(restnumber,64); 
END; 
+0

是,除非指定,参数默认情况下只。 – gmiley 2014-12-04 19:32:34

+0

你的回答是正确的--- + 1,你应该指出我的回答是错的!我已经删除它BTW ... – 2014-12-04 19:35:40

+0

我忘了添加我的代码,我需要得到余下的partrest,而不是只是数字。然而,这又一次打破了我的代码 – Damhuis 2014-12-04 20:03:12