2017-04-17 23 views
0

我想在oracle中执行一个过程,但执行过程时出现异常。请帮助我,我错了。在java中执行oracle过程时得到异常

错误:

java.sql.SQLException: ORA-06550: line 1, column 36: 
    PLS-00103: Encountered the symbol ";" when expecting one of the following: 

    . () , * @ % & = - + </> at in is mod remainder not rem => 
    <an exponent (**)> <> or != or ~= >= <= <> and or like like2 
    like4 likec between || indicator multiset member submultiset 
The symbol ")" was substituted for ";" to continue. 

步骤:

CREATE OR REPLACE PROCEDURE "TEST_101"."AVG_UNLOADING" 
(
P_CODE IN VARCHAR2, 
P_DATE IN VARCHAR2, 
P_VANID IN NUMBER, 
P_CURSOR OUT SYS_REFCURSOR 
) 
IS 
BEGIN 
OPEN P_CURSOR 
FOR 
select CARGO_NAME,IMP_EXP_NAME,'TEMP_CARGO_Import',ROUND(SUM(QTY)/((((extract(day from max(END_TIME)-DISCHRG_CMNCD_ANCHRG_TM)*(24*60))+ 
(extract(day from max(END_TIME)- DISCHRG_CMNCD_ANCHRG_TM)*(60)) + (EXTRACT(DAY FROM max(END_TIME)- DISCHRG_CMNCD_ANCHRG_TM)))-DELAYS)/(24*60))) QTY 
from(SELECT (SELECT C.CARGO_CATEGORY_NAME FROM IPT_CARGOMASTER C WHERE C.CARGO_CODE =LL.CARGO_CODE)CARGO_NAME,IL.IMP_EXP_NAME,CASE L.CARGO_TYPE_CODE WHEN 'VC001' THEN LL.DISCHARGE_QUANTITY WHEN 'VC002' THEN LL.QUANTITY_GMT WHEN 'VC004' THEN LL.QUANTITY_GMT 
else LL.DISCHARGE_QUANTITY end QTY ,L.DISCHRG_CMNCD_ANCHRG_TM,LL.END_TIME ,(SELECT SUM(T3.TOTAL_TIME) FROM IPT_LOADUNLOADDELAYLINES T3 WHERE T3.ID = L.ID AND T3.MINUS_DELAY_HOURS = 'true') AS DELAYS  
,LL.LINE_ID,L.VAN_ID FROM IPT_LOADINGUNLOADING L JOIN IPT_LOADUNLOADOPERATIONLINES LL ON L.ID=LL.ID LEFT JOIN IPT_IMPORTEXPORTFORM I ON I.VAN_ID=L.VAN_ID JOIN IPT_IGMEPCARGOLINES IL ON I.ID=IL.ID AND LL.CARGO_CODE=IL.CARGO_CODE 
where L.PORTDETAIL_CODE= P_CODE and I.PORTDETAIL_CODE=L.PORTDETAIL_CODE and IL.IMP_EXP_NAME like '%KKR%' AND LL.END_TIME<=TO_TIMESTAMP(TO_CHAR(P_DATE || ' 06:59'),'dd/MM/yyyy HH:MI') 
and L.VAN_ID in (P_VANID) 
)t group by CARGO_NAME, IMP_EXP_NAME, 'TEMP_CARGO_Import',DISCHRG_CMNCD_ANCHRG_TM,DELAYS; 
END AVG_UNLOADING; 

执行过程

stkagentlist = "{call AVG_UNLOADING(?,?,?,?}"; 
callableStatement = conn.prepareCall(stkagentlist); 
callableStatement.setString(1, portCode); 
callableStatement.setString(2, dt); 
callableStatement.setString(3, vanids); 
callableStatement.registerOutParameter(4, OracleTypes.CURSOR); 
callableStatement.executeUpdate(); 
+0

集团通过获得前选择组中的执行和指定(延迟),我认为这是错误 –

+0

哪里是你的java代码调用proc –

+0

你的查询是一个绝对的混乱。整洁的布局不是一些时尚的附加,它对于调试代码来说是一个真正的帮助。 – APC

回答

0
stkagentlist = "{call AVG_UNLOADING(?,?,?,?}"; 

我想在此声明收官支架丢失,它应该是:

stkagentlist = "{call AVG_UNLOADING(?,?,?,?)}"; 
相关问题