Db2 11.1

Compound-SQL in Java™-Anwendungen

SQLJ-Anweisungsklauseln in SQLJ-Anwendungen oder SQL-Anweisungen in JDBC-Anwendungen können zusammengesetzte Anweisungen enthalten.

Eine zusammengesetzte Anweisung ist ein BEGIN-END-Block, der SQL-und prozedurale Anweisungen enthält. Alle Compound-Anweisungen in JDBC-und SQLJ-Anwendungen werden dynamisch ausgeführt.

Der Datenserver muss Db2 auf Linux-, UNIX-und Windows-Systemen Version 9.7 oder höher sein.

Der IBM® Data Server Driver for JDBC and SQLJ übergibt die Verbindung SQL ohne Änderung an den Datenserver.

Wenn Ihr Compound SQL Parametermarken enthält, müssen Sie die Eigenschaft Connection oder DataSource enableNamedParameterMarkers auf DB2BaseDataSource.YES (1) setzen.

Darüber hinaus müssen Sie auf dem Datenserver die Registrierdatenbankvariable DB2_COMPATIBILITY_VECTOR setzen, um die PL/SQL-Kompilierung und-Ausführung zu aktivieren.

Das folgende Beispiel zeigt den JDBC-Code, der eine SQL-Anweisung mit einem inlinierten Compound ausführt. Die Compound-SQL-Anweisung enthält Parametermarken, so dass Sie enableNamedParameterMarkers auf DB2BaseDataSource.YES (1) setzen müssen.

…
Properties properties = new Properties(); // Eigenschaftsobjekt erstellen
properties.put("user", "db2adm");         // Benutzer-ID für Verbindung festlegen
properties.put("password", "db2adm");     // Kennwort für Verbindung festlegen
properties.put("enableNamedParameterMarkers", 
  new String("" + 
  com.ibm.db2.jcc.DB2BaseDataSource.YES + "")); 
                                          // Eigenschaft 'enableNamedParameterMarkers' festlegen
String url = "jdbc:db2://luw1.myloc.ibm.com:9896/sample";
                                          // URL für Datenquelle festlegen
Connection conn1 = DriverManager.getConnection(url, properties); 
                                          // Verbindung erstellen
…
                                          // Zusammengesetzte Anweisung analog
                                          // zu einer einzelnen SQL-Anweisung
                                          // vorbereiten und ausführen
PreparedStatement ps = conn1.prepareStatement(
     "BEGIN atomic " +
       " for row as " +
       "  select pk, c1, discretize (c1) as d from source " +
       " do " +
       "  if row.d is null then " +
       "   insert into except values (row.pk, ?); " +
       "  else " +
       "   insert into target values (row.pk, ?); " +
       "  end if; " +
       " end for; " +
     "end");
   ps.setInt(1, 98);
   ps.setInt(2, 88);
   ps.execute();
…