Программа JDBC для вызова хранимой процедуры со сложными входами и выходами - PullRequest
0 голосов
/ 12 января 2012

Не могли бы вы помочь мне написать программу JDBC для вызова ниже хранимой процедуры, которая имеет сложный тип ввода.

Ниже мое определение хранимой процедуры

CREATE OR REPLACE TYPE inputObjects_t AS OBJECT (
    serviceID        VARCHAR2(7),
    offerID          VARCHAR2(7),
    transactionID    NUMBER
)

CREATE OR REPLACE TYPE inputArray_t IS VARRAY(100) OF inputObjects_t

PROCEDURE CheckObjectInput( pCustomerRef IN VARCHAR2,
                                 pSubscriptionPS IN NUMBER,
                                 pExpiryObjects IN inputArray_t,
                                 pTransactionDtm IN DATE,
                                 pTransactionID IN NUMBER);

PROCEDURE CheckObjectOutput( pCustomerRef IN VARCHAR2,
                                 pSubscriptionPS IN NUMBER,
                                 pExpiryObjects OUT inputArray_t,
                                 pTransactionDtm IN DATE,
                                 pTransactionID IN NUMBER);

Ответы [ 2 ]

1 голос
/ 11 мая 2012

Если вы используете Oracle, пожалуйста, используйте класс OracleCallableStatement.
Существует метод, называемый setSTRUCT.

Общий пример:

OracleConnection conn = (...)
OracleCallableStatement cs = (OracleCallableStatement) conn.prepareCall(sql);
StructDescriptor sd = StructDescriptor.createDescriptor("MY_TYPENAME", conn);
Object[] attribs = new Datum[3];
attribs[0] = new CHAR("value1",  charSet);
attribs[1] = new CHAR("value2",  charSet);
CLOB clob2 = attribs[2] = new CLOB(conn);
STRUCT st = new STRUCT(sd, conn, attribs);
(...)
cs.setSTRUCT(n, st);
(...)
cs.execute()
0 голосов
/ 12 января 2012

Вам понадобится пул для хранения ваших соединений с базой данных, а затем методы для вызова хранимых процедур. Вы, вероятно, захотите что-то вроде:

public callStoredProc(String serviceID, String offerID, Integer trasnactionID) {
   try {
   myConnection.startTransaction();
   StringBuilder mySQL = new StringBuilder();
   ... build sql statement ...
   myConnection.execute(mySQL.toString());
   } catch (SQLException sqle) {
   ...
   } finally {
      myConnection.endTransaction();
      ... sql cleanup ...
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...