Когда я вызываю процедуру в java в моем вызываемом выражении, он говорит, что у меня есть числовая или значащая ошибка в моем коде. Тем не менее, когда я пытался запустить файл 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 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.