Как выполнить функцию Oracle в коде Java [duplicate]

Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            myCallback(response);
        }
    });

    return result;
}

function myCallback(response) {
    // Does something.
}
2
задан Java Questions 23 July 2014 в 07:10
поделиться

4 ответа

функция оракула:

FUNCTION ap_ch_get_acct_balances (VAR_PI_MOB_NO_ACCT_NO VARCHAR2,
VAR_REPLY_CODE OUT NUMBER, VAR_EXT_RESPONSE OUT VARCHAR2, VAR_PO_ACC_BAL OUT CHAR,
VAR_PO_ACCT_NO OUT CHAR)  

вызов в java:

String call = "{ ? = call FCRLIVE.AP_CH_GET_ACCT_BALANCES(?, ?, ?, ?, ?) }"; 
2
ответ дан AtmiyaDas2014 4 September 2018 в 09:24
поделиться

Вы можете использовать CallableStatement

String sql="begin ? := aaaa.fucntion(?,?); end;";
CallableStatement stmt = connection.prepareCall(sql);
stmt.registerOutParameter(1, OracleTypes.BOOLEAN);
stmt.setInt(2, number);
stmt.setTimestamp(3, date);
stmt.execute();

. После этого вы можете прочитать возвращаемое значение с помощью:

stmt.getBoolean(1)
1
ответ дан cmg_george 4 September 2018 в 09:24
поделиться

Использовать session.doWork из спящего режима.

Как вызвать функцию Oracle из спящего режима с возвращаемым параметром?

Из Oracle documentation -

http://docs.oracle.com/cd/F49540_01/DOC/java.815/a64686/04_call5.htm

FUNCTION balance (acct_id NUMBER) RETURN NUMBER IS
  acct_bal NUMBER;
BEGIN
  SELECT bal INTO acct_bal FROM accts
    WHERE acct_no = acct_id;
  RETURN acct_bal;
END;

Из JDBC программа, ваш вызов функции баланса может выглядеть следующим образом:

CallableStatement cstmt = conn.prepareCall("{? = CALL balance(?)}");
cstmt.registerOutParameter(1, Types.FLOAT);
cstmt.setInt(2, acctNo);
cstmt.executeUpdate();
float acctBal = cstmt.getFloat(1);
3
ответ дан Community 4 September 2018 в 09:24
поделиться

Существует несколько способов сделать это. Но самый простой из них - это запрос.

String sql="select myFunction('"+number+"','"+date"') from dual";
statement.execute(sql);

Задайте параметры ввода и вывода, если вы используете JDBC.

Если вы используете hibernate, используйте Named Queries примерно так: YourMapping.hbm .xml

<sql-query name="my_function" callable="true">
<return alias="demo" class="net.bean.Demo">
<return-property name="id" column="id"/>
<return-property name="fname" column="fname"/>
<return-property name="lname" column="lname"/>
</return>
    {?=call demoFunc(:param1,:param2)}
</sql-query>

Теперь это создаст Именованный запрос для функции

. Следующее, что нужно сделать, это просто вызвать его, используя следующий код

Query query=session.getNamedQuery("my_function");
query.setParameter("parma1",date);
query.setParameter("parma2",number);
query.executeUpdate();

Обратите внимание, что в файле hbm.xml имя и свойства класса возврата применяются только в том случае, если вы отобразили возвращаемые значения, если функция возвращает соответствующие значения.

4
ответ дан Darshan Lila 4 September 2018 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: