2016-12-28 14 views
1

現在、私はDAOクラスのJDBC経由でpostgresql関数データをフェッチする問題に直面しています。接続が正しく確立されています。org.postgresql.util.PSQLException:不正な関数またはプロシージャのエスケープ構文(オフセット1)

CallableStatement mngStatement = conn    
        .prepareCall("{? = CALL SELECT_SEARCH_DETAILS(?,?,?,?,?,?,?,?)}"); 

mngStatement.registerOutParameter(1, Types.VARCHAR); 
mngStatement.setString(2,abc.getContractNumber()); 
mngStatement.setString(3,abc.getOrderNumber()); 
mngStatement.setString(4,abc.getShipmentNumber()); 
mngStatement.setString(5,abc.getShipmentControlNo()); 
mngStatement.setString(6,abc.getStatusFromDate()); 
mngStatement.setString(7,abc.getStatusToDate()); 
mngStatement.setString(8,abc.getSourceSystem()); 
mngStatement.setString(9,abc.getDestinationSystem()); 

mngStatement.execute(); 
rs = (ResultSet) mngStatement.getObject(1); 

のようなエラーガイド:

org.postgresql.util.PSQLException:不正な関数またはプロシージャ エスケープ構文は、あなたの提案で私を助けてください

1.オフセット。前もって感謝します。

機能:

FUNCTION SELECT_SEARCH_DETAILS(
    IN P_CONTARCT_NUM character varying, 
    IN P_ORDER_NUM character varying, 
    IN P_SHIPMENT_NUM character varying, 
    IN P_SHIP_CON_NUM character varying, 
    IN P_FROM_DATE character varying, 
    IN P_TO_DATE character varying, 
    IN P_SOURCE_SYSTEM character varying, 
    IN P_DESTINATION_SYSTEM character varying) 
    RETURNS table(CONTRACT_NUMBER text,ORDER_NUMBER text, SHIPMENT_NUMBER text, SCN text, STATUS_CODE text,STATUS_DATE text, LAST_UPDATE_DATE text, SOURCE_SYSTEM text, DESTINATION_SYSTEM text, RFID_FOLLOW_ON_CODE text, UID_INDICATOR text, IVC_SHIPMENT_SEQ_ID text) AS 
$BODY$ 
+1

何あなたのストアドプロシージャが見えますか? – Berger

+0

こんにちはberger、私は質問の関数本体を更新しました。 – ArnabDutta

+0

誰かがコメントで提案したように、小文字の 'call'を試してみることができますか? – Berger

答えて

0

あなたはCallableStatementは必要ありません。

PreparedStatementselectとしてください。あなたの関数として

は、あなたが使用する必要があります(「設定」)のテーブルを返します。

select * from SELECT_SEARCH_DETAILS(...); 

だから、完全なコードは次のようになります。

PreparedStatement pstmt = conn.prepareStatement("select * from SELECT_SEARCH_DETAILS(?,?,?,?,?,?,?,?)"); 

pstmt.setString(1, abc.getContractNumber()); 
pstmt.setString(2, abc.getOrderNumber()); 
pstmt.setString(3, abc.getShipmentNumber()); 
pstmt.setString(4, abc.getShipmentControlNo()); 
pstmt.setString(5, abc.getStatusFromDate()); 
pstmt.setString(6, abc.getStatusToDate()); 
pstmt.setString(7, abc.getSourceSystem()); 
pstmt.setString(8, abc.getDestinationSystem()); 

ResultSet rs = pstmt.executeQuery(); 
+0

ありがとうございました。それは完璧に働いています。 :) – ArnabDutta

関連する問題