Java und Oracle Funktion

Status
Nicht offen für weitere Antworten.
P

Paata

Gast
Ich habe folgende Funktion in Oracle:

Code:
create or replace function sf_SearchStudent(
       nID in  number
       ) 
return MyPackage.CursorType is
Result MyPackage.CursorType;
begin
  open Result for select * from STUDENT where ID=nID;
  return Result;
end sf_SearchStudent;

Das arbeiten in Oracle Fein, aber wenn ich ruffe Function (oben geschriebene Code) von Java:

Code:
CallableStatement callst = conn.prepareCall("{?=call sf_SearchStudent(?,?,?,?)}");                                            
      callst.registerOutParameter(1, OracleTypes.CURSOR);
      callst.setInt(1,id);
      callst.setString(2,name);
      callst.setString(3,surname);
      callst.setInt(4,age);
      callst.executeUpdate();   ------->>>>> ERROR Occur

      ResultSet res = ((OracleCallableStatement)callst).getCursor(4);
      while (res.next())
      {
       System.out.println(res.getInt("ID"));
       System.out.println(res.getString("NAME"));
       System.out.println(res.getString("SURNAME"));
       System.out.println(res.getInt("AGE"));
     }

dann habe ich eine Probleme, etwas ist falsch... bitte, helfen!
 

Bleiglanz

Gesperrter Benutzer
willst du uns veralbern?

du hast nur einen Parameter (nId), wieso versuchst du, der storedProc vier Parameter zu übergeben??
 
G

Guest

Gast
Ja Sie haben Recht, diese 4 parameter ist einfach mechanische falsch und das ist nichr meine konkrette Problem.
Eine code:

CallableStatement callst = conn.prepareCall("{?=call sf_SearchStudent(?,?,?,?)}");
callst.registerOutParameter(1, OracleTypes.CURSOR);
callst.setInt(1,id);
callst.executeUpdate(); ------->>>>> ERROR ----HIER IST PROBLEM---------------------<<<<<<<<<
ResultSet res = ((OracleCallableStatement)callst).getCursor(4);
while (res.next())
{
System.out.println(res.getInt("ID"));
System.out.println(res.getString("NAME"));
System.out.println(res.getString("SURNAME"));
System.out.println(res.getInt("AGE"));
}

Java gibt mir folgende ERROR:

java.sql.SQLException: Missing IN or OUT parameter at index:: 1
 

Bleiglanz

Gesperrter Benutzer
dann müssen aber auch die 4 Fragezeichen weg (weils ja nur ein out-Parameter ist = das resultset und ein eingabeparameter nid)
Code:
CallableStatement callst = conn.prepareCall("{?=call sf_SearchStudent(?)}"); 
callst.registerOutParameter(1, OracleTypes.CURSOR);
callst.setInt(2,id); 
callst.executeUpdate(); 
ResultSet res = ((OracleCallableStatement)callst).getCursor(1);
 
P

paata

Gast
Danke fuer deine Raten, aber das ist auch nicht ein Fehler, ich habe alle varianten probiert, aber trotzdem Java zeigt mir dieselbe ERROR:

java.sql.SQLException: Missing IN or OUT parameter at index:: 2

Eine Code in Java habe ich so geschrieben:

CallableStatement callst = conn.prepareCall("{?=call sf_SearchStudent(?)}");
callst.registerOutParameter(1, OracleTypes.CURSOR);
callst.setInt(2,id);
callst.executeUpdate(); ---------->>>>>>>>> ERROR --------------<<<<<<<<<<<<<<<<<
ResultSet res = ((OracleCallableStatement)callst).getCursor(1);
 

abollm

Top Contributor
paata hat gesagt.:
Danke fuer deine Raten, aber das ist auch nicht ein Fehler, ich habe alle varianten probiert, aber trotzdem Java zeigt mir dieselbe ERROR:

java.sql.SQLException: Missing IN or OUT parameter at index:: 2

Eine Code in Java habe ich so geschrieben:

CallableStatement callst = conn.prepareCall("{?=call sf_SearchStudent(?)}");
callst.registerOutParameter(1, OracleTypes.CURSOR);
callst.setInt(2,id);
callst.executeUpdate(); ---------->>>>>>>>> ERROR --------------<<<<<<<<<<<<<<<<<
ResultSet res = ((OracleCallableStatement)callst).getCursor(1);

Ist die Oracle-Funktion innerhalb eines Packages?
 

Bleiglanz

Gesperrter Benutzer
Code:
conn.prepareCall("{?=call sf_SearchStudent(?)}");
stimmt wohl nicht weil ein Doppelpunkt fehlt; entweder "native"
Code:
conn.prepareCall("begin ? := sf_SearchStudent(?); end;");
oder mit "jdbc"-Syntax
Code:
conn.prepareCall("{ call ? := sf_SearchStudent((?) }");
 

abollm

Top Contributor
Paata hat gesagt.:
Ich habe folgende Funktion in Oracle:

...

Das arbeiten in Oracle Fein, aber wenn ich ruffe Function (oben geschriebene Code) von Java:

dann habe ich eine Problem...

Diese Aussage ist leider falsch, da ich die o.a. Funktion so nicht zum Laufen gebracht habe.

Außerdem sollte man - außer in reinen Demos - Stand-Alone-Funktionen in
Oracle-Produktivumgebungen _grundsätzlich_ vermeiden.
Deshalb habe ich ein Package mit der Funktion angelegt.

Der Aufruf aus Java sieht dann wie folgt aus:
Code:
/*
 * Created on 14.11.2004
 *
 * @author ABollm
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 *
 *
 * Dieses Beispiel zeigt den Aufruf von PL/SQL-Objekten via JDBC.
 */

import java.sql.*;
import oracle.jdbc.driver.*;

class PCKCallStudent
{
  public static void main (String args [])
       throws SQLException, ClassNotFoundException
  {

    // Laden des Oracle JDBC Treibers (hier OCI, s.u.)
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

    String url = "jdbc:oracle:oci8:@..."; // SID etc. eintragen
     try {
      String url1 = System.getProperty("JDBC_URL");
      if (url1 != null) {
        url = url1;
      }
      System.out.println ("URL: " + url+"\n");
    } catch (Exception e) {
      // Falls irgendeine (Sicherheits-) Ausnahme auftritt, ignorieren
      // Standard ...
    }

    // Verbindung zur Datenbank
    Connection conn =
      DriverManager.getConnection (url, "scott", "tiger");

    // Aufruf einer SP mit IN und OUT Parameter
    //String query = "begin :1 := sp_listEmp; end;";

    // PL/SQL-Aufruf vorbereiten
    CallableStatement call =
       conn.prepareCall ("{ ? = call pck_student.sf_searchstudent (?)}");

    // bestimmten Studenten-Datensatz heraussuchen
    call.registerOutParameter (1, OracleTypes.CURSOR);
    call.setInt(2,7369);                                // hier die Datensatz-ID einfügen!

    call.execute ();
    ResultSet rset = (ResultSet)call.getObject (1);

    // Cursor mit kompl. Datensatz ausgeben
    while (rset.next ()) {
       System.out.println ("Name:        "+rset.getString ("NAME"));
       System.out.println ("Surname:     "+rset.getString ("SURNAME"));
       System.out.println ("Age (years): "+rset.getString ("AGE"));
       System.out.println ("Imm. Date:   "+rset.getString ("IMMATRICULATIONDATE"));
       //...
    }
    // Alles schließen
    rset.close();
    call.close();
    conn.close();
  }
}
Falls Interesse an den SQL-Statements zum Anlegen der Tabelle und des Packages besteht, bitte
hier kurz eine Nachricht posten. Ich werde den Code dann ebenfalls einstellen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
1 Java - Oracle Restore Point Datenbankprogrammierung 2
R Oracle Java -> Tomcat -> Oracle Datenbankprogrammierung 4
G Float Problem Java Oracle Datenbankprogrammierung 4
M Problem mit SUBSTR (Oracle) bzw. substring (Java) Datenbankprogrammierung 13
L Oracle: PL/SQL und Java Datenbankprogrammierung 3
T INSERT-Befehl in Java für Oracle Datenbankprogrammierung 4
H Oracle XE 10 mit Java Datenbankprogrammierung 4
L Java 1.5.0_04 & Oracle 9.2.0.6: JDBC Treiber? Datenbankprogrammierung 10
B Benutzeroberfläche für eine Oracle-DB mit JAVA erstellen Datenbankprogrammierung 4
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
B CSV in Java einbinden und Rechnung Datenbankprogrammierung 7
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2
H Datenbank Export mit Java Datenbankprogrammierung 3
I MariaDB-Verbindung in JAVA Datenbankprogrammierung 11
W Daten in Java intern abfragen Datenbankprogrammierung 1
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
D Java Datenbanken Datenbankprogrammierung 1
Y H2 H2 foreign key in Spark Java ausgeben Datenbankprogrammierung 1
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
K Java Datenbank auslesen Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
B MySQL bplaced Datenbank mit Java ansprechen Datenbankprogrammierung 11
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
O PostgreSQL Java Row Index erhalten Datenbankprogrammierung 1
dzim Cassandra Cluster DB und der Java-Treiber Datenbankprogrammierung 1
H Entity in Java implementieren Datenbankprogrammierung 13
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
P Datanbank für Java-Programmierung Datenbankprogrammierung 10
F Java SQLite Error Datenbankprogrammierung 19
F SQL Datenbank an Java Code anbinden Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben