Что это значит? (Java, базы данных) - PullRequest
1 голос
/ 03 декабря 2010
 StringBuffer sql = new StringBuffer("{ call ? := mailmerge_package.getLetters(?, ?, ?)}");

Я знаю, что это похоже на SQL-оператор, но в SQL нет такого понятия, как call.

Может ли кто-нибудь объяснить мне, что это значит и как это становится понятным в Java

EDIT:

import oracle.jdbc.driver.OracleTypes;
//omitted code
CallableStatement cs = null;
        ResultSet rs = null;
     StringBuffer sql = new StringBuffer("{ call ? := mailmerge_package.getLetters(?, ?, ?)}");
 try {
            cs = conn.prepareCall(sql.toString());
            cs.registerOutParameter(1, OracleTypes.CURSOR);
            DAOUtils.setLong(cs, 3, checklistAnsMastId);
            DAOUtils.setLong(cs, 2, workEntityId);
            cs.setLong(4, patientId);
            DAOUtils.setLong(cs, 5, encounterId);
            cs.setString(6, encounterType);
            cs.execute();
            rs = (ResultSet)cs.getObject(1);

Ответы [ 3 ]

6 голосов
/ 03 декабря 2010

Это похоже на SQL, который вы можете передать Oracle.

Если это так, то это можно использовать для вызова функции Oracle mailmerge_package.getLetters, которая возвращает значение.Это значение анализируется JDBC и уровнем Db для замены первого ?, это можно прочитать в переменную Java.функция Oracle принимает 3 параметра (3? в скобках)

3 голосов
/ 03 декабря 2010
{call <<procedure name>>}

является escape-последовательностью SQL .По сути, поскольку разные базы данных имеют разный синтаксис для вызова пользовательской процедуры, а разные базы данных имеют разные встроенные функции для разных вещей, таких как общие функции даты / времени, драйверы JDBC реализуют несколько escape-последовательностей, где драйвер переводит универсальныйспецификацию (т.е. {call <<procedure name>>}) и расширяет ее до синтаксиса, специфичного для базы данных.Существуют различные другие escape-последовательности для таких вещей, как внешние объединения, литералы даты и строковые функции, которые могут быть полезны, если вы пытаетесь написать независимый от базы данных код.

FYI, эти escape-последовательности изначально были определены в ODBCAPI, а затем принят JDBC, так что вы можете найти больше документации, связанной с ODBC, чем JDBC.

2 голосов
/ 03 декабря 2010

Это вызов хранимой процедуры базы данных. Но какую базу данных я не могу сказать из этого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...