这是什么意思?(Java,数据库)

cod*_*441 1 java database oracle

 StringBuffer sql = new StringBuffer("{ call ? := mailmerge_package.getLetters(?, ?, ?)}");
Run Code Online (Sandbox Code Playgroud)

我知道它就像一个sql语句,但在SQL中没有'call'这样的东西.

有人可以向我解释它的含义以及Java如何理解它

编辑:

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);
Run Code Online (Sandbox Code Playgroud)

use*_*019 6

这看起来像您可以传递给Oracle的SQL.

如果是这样,那么这可以用于调用返回值的Oracle函数mailmerge_package.getLetters.该值由JDBC和Db层解析以替换第一个?,这可以读入Java变量.Oracle函数需要3个参数(括号中的3?)