2010-12-03 19 views
1
StringBuffer sql = new StringBuffer("{ call ? := mailmerge_package.getLetters(?, ?, ?)}"); 

私はそれがSQL文のようなものだと知っていますが、SQLでは 'call'とは言いません。 EDITこれはどういう意味ですか? (java、database)

誰かがそれが何を意味するのか私に説明することができ、それがどのように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); 
+1

文脈が必要です。使用しているデータアクセステクノロジーは何もわかりません。 –

+0

そのオラクルdb – code511788465541441

+0

@ user521180:これはデータ*アクセス*技術ではなく、*ストレージ*テクノロジーです。 StringBufferを作成するコードを投稿しましたが、使用方法については何も述べていません。 –

答えて

3
{call <<procedure name>>} 

は、SQL escape sequenceである。基本的に、異なるデータベースには、ユーザー定義プロシージャの呼び出し方法が異なるため、異なるデータベースには共通の日付/時刻関数などのさまざまな組み込み関数があります。JDBCドライバは、ドライバがジェネリック(つまり、{call <<procedure name>>})、それをデータベース固有の構文に展開します。外部結合、日付リテラル、文字列関数など、データベースに依存しないコードを書くときに便利な、さまざまなエスケープシーケンスがあります。

FYIでは、これらのエスケープシーケンスはもともとODBC APIで定義されていたため、JDBCに採用されています。

6

をこれは、Oracleに渡すことができますSQLのように見えます。

この場合、これを使用して値を返すmailmerge_package.getLettersというOracle関数を呼び出すことができます。その値はJDBCとDb層によって最初の?を置き換えるために解析され、これはJava変数に読み込むことができます。 Oracle関数は3つのパラメータ(かっこ内の3?)をとります

2

データベースのストアドプロシージャを呼び出します。しかし、どのデータベース、私はこのコードからはわかりません。

関連する問題