Oracle Funktion mit mehreren Out Parametern ausführen?

Disaster2k

Mitglied
Hi,

ich will diese Oracle Funktion in meine Java Programm ausführen:

Code:
 FUNCTION f_insertBenutzerTitel
    ( pi_s_userid                     IN  sec_user.userid%TYPE
    , pi_s_titel                      IN  VARCHAR2
    , pi_n_person_id                  IN  sec_user.person_id%TYPE := NULL
    , po_s_errortext                 OUT  VARCHAR2
    , po_s_errorpos                  OUT  VARCHAR2               
    ) RETURN NUMBER;

Geht das mit Hibernate oder irgendwie anders? Ich hab es mit Hibernate + NamedQuery probiert. Aber leider ohne erfolg.

Wäre super wenn mir jemand einen Tipp geben kann.

Danke
 
Zuletzt bearbeitet von einem Moderator:
Hi, habe die Abfrage jetzt mal so zum laufen bekommen:

Java:
 Session session = HibernateUtil.getSessionFactory().openSession();
	CallableStatement cs = null;
        int ret = -1;

	if(session == null)
            System.out.println("No session");
	else
	    System.out.println("Session oppen");

	Transaction tx = session.beginTransaction();

	Connection conn = session.connection();
	try {
            cs = conn.prepareCall("{? = call f_insertBenutzerTitel(?, ?, ?, ?, ?)}");
            cs.registerOutParameter(1, Types.INTEGER);
	    cs.setString(2, "stift");
	    cs.setInt(3, 5982);
	    cs.setInt(4, 45);
            cs.registerOutParameter(5, Types.VARCHAR);
            cs.registerOutParameter(6, Types.VARCHAR);
	    cs.execute();
            ret = cs.getInt(1);
            String errortext = cs.getString(5);
            String errorpos = cs.getString(6);
            System.out.println(errortext + ": " + errorpos + " -> " + ret);

	} catch (SQLException ex) {
           
	}

	tx.commit();

        return ret;

Meine offenen Fragen:

- Kann man den Parametern auch einen namen geben das man nicht mit dem index drauf zugreifen muss?
- Was ist wenn eine Parameter (hier der Nr. 3) "optional ist" also entweder weggelassen werden kann oder mit Null übergeben werden soll wenn nicht benötigt. Wie übergebe ich in dem Fall NULL.

Danke
 
mit [c] cs.setNull(index, sql.Types.INTEGER);[/c] z.B. ein Integer auf null setzen. Parameternamen kannst du nicht vergeben aber ud könntest sowas machen

Java:
int value1 = 1

statement.setString(value1,"aaa");
 

Neue Themen


Zurück
Oben