当我在可调用语句中用java调用过程时,它说我的代码中存在数字或值错误。但是,当我尝试在oracle数据库上单独运行SQL文件时,它运行良好。上面出现数字或值错误,我需要的结果非常好。所以我不明白为什么每当在我的java类中调用该过程时,它都会一直说该错误。我试图找到所谓错误所在的行,这里就是...
这是我的程序的代码
CREATE OR REPLACE
PROCEDURE RENTING
(P_NNAME IN VARCHAR2,
P_ADD IN VARCHAR2,
P_PHONE IN NUMBER,
P_ORDER IN VARCHAR2,
P_EMP_ID IN NUMBER,
P_VALID OUT NUMBER,
P_OR_NO OUT NUMBER
)
IS
V_AVAI TITLE.AVAILABLE%TYPE;
P_OR VARCHAR2(5000);
P_OR_2 VARCHAR2(5000);
ORD_NO NUMBER(6);
TID NUMBER(38);
NUM NUMBER(3);
CTR NUMBER(3);
GO NUMBER(1);
BEGIN
P_OR:=P_ORDER;
ORD_NO:=SEQ_ORDER_NO.NEXTVAL;
INSERT INTO TRANSACTIONS (ORDER_NO, CUST_NICKNAME, CUST_ADD, CUST_CONTACT)
VALUES (ORD_NO, P_NNAME, P_ADD, P_PHONE);
INSERT INTO RENTS (ORDER_NO,ORDERS,DATERENTED,EMP_ID,DATERETURNED)
VALUES (ORD_NO,P_OR,SYSDATE,P_EMP_ID,NULL);
LOOP
CTR:=INSTR(P_OR,';');
NUM:=LENGTH(P_OR);
IF CTR!=0 THEN
CTR:=CTR-1;
P_OR_2:=SUBSTR(P_OR,1,CTR);
TID:=TO_NUMBER(P_OR_2); //here's the part of the conversion that is wrong in java
CTR:=CTR+2;
P_OR:=SUBSTR(P_OR,CTR,NUM);
SELECT AVAILABLE
INTO V_AVAI
FROM TITLE
WHERE TITLE_ID=TID;
IF V_AVAI!=0 THEN
UP(TID);
P_VALID:=1;
ELSIF V_AVAI=0 THEN
P_VALID:=0;
END IF;
ELSIF CTR = 0 THEN
P_OR_2:=SUBSTR(P_OR,1,NUM);
TID:=TO_NUMBER(P_OR_2);
SELECT AVAILABLE
INTO V_AVAI
FROM TITLE
WHERE TITLE_ID=TID;
IF V_AVAI!=0 THEN
UP(TID);
P_VALID:=1;
P_OR_NO:=ORD_NO;
ELSIF V_AVAI=0 THEN
P_VALID:=0;
END IF;
GO:=1;
END IF;
EXIT WHEN GO=1;
END LOOP;
END RENTING;
/
最佳答案
在调试器中运行程序并评估参数。
也许您正在尝试放置无法转换为NUMBER的字符串。
关于java - 我在Java中调用的过程出现数字或值错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24018198/