Zum Inhalt springen

Array von PL/SQL heraus zurückgeben


Ganymed

Empfohlene Beiträge

Hallo zusammen,

ich habe hier eine Datenmenge von number-Datentypen, die ich gerne als eine Art Schnittstelle an einen JAVA-Programmierer übergeben möchte.

Zu diesem Zweck habe ich eine Funktion geschrieben, die mir die gewünschten Daten in einen selbstdefinierten Typen sichert:

TYPE tMeinDatentyp IS TABLE OF NUMBER

         INDEX BY BINARY_INTEGER;
Nun möchte ich dieses Result gerne als Returnwert zurückgeben. Leider habe ich überhaupt keine Ahnung, wonach ich suchen muss, bzw. das Codesement im Kopf der Funktion aussehen muss, um dies zu bewerkstelligen. Mit einem
create or replace function MeineFunktion(

    vVariable               in varchar

)return tMeinDatentyp is

bekomme ich als Meldung PLS-00498, welche besagt, dass ich einen Datentyp benutzen möchte, den ich noch nicht deklariert habe (ist ja an und für sich schon richtig ;)).

Könntet ihr mir helfen?

Ist diese TYPE-Geschichte auch der völlig falsche Ansatz? Immerhin muss der JAVA-Entwickler ja auch was mit meinem Result anfangen können.

Dank und Gruß

Gany

Link zu diesem Kommentar
Auf anderen Seiten teilen

In dem Beispiel wird folgendes angelegt:

- REF CURSOR ref_cursor

- Tabelle STOCK_PRICES

- Stored Procedure sp_get_stocks

Die Stored Procedure sp_get_stocks öffnet einen Cursor, wobei die Tabelle STOCK_PRICES die Datenquelle ist. Das Abfrageergebnis wird dann in Form eines REF CURSORs zurückgegeben.

Im Abschnitt "Calling the stored procedure from Java" wird dann beschrieben, wie man per Java auf den Rückgabewert zurückgreift.

Wenn ich Dich richtig verstanden habe, sollte genau dieser Mechanismus das sein, was Du suchst.

Ist der Ansatz ein wenig klarer geworden?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Irgendwie hab ich im PL/SQL Developer das gleiche in grün...

Es ist nicht vorher deklariert.

Gibts keine anständigen Beispiele ohne dieses Package Declare gedöns?

Meine "tollen" Bücher hier bringen mich auch nicht weiter. :hells:

Da steht nur drin was es ist, aber nicht, wie man es benutzt.

Wie man das von JAVA abholt ist mir eigentich egal, ich hab da nichts mehr mit zu tun. Am liebsten wäre mir ne Rückgabe von Numberwerten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich nochmal...

Ich schaffe es einfach nicht, meinen eigenen Datentyp als Rückgabeparameter zu definieren.

Ich hab jetzt zig Beispiele durch, keines klappt. Ich weiß nicht, wo ich das hin packen soll :confused:

Ein Beispiel ist:

DECLARE

   TYPE SalesForce IS VARRAY(25) OF Salesperson;

   FUNCTION top_performers (n INTEGER) RETURN SalesForce IS ...
Mache ich das analog zu meinem:

Declare TYPE tMeinDatentyp as TABLE OF NUMBER INDEX BY BINARY_INTEGER;


create or replace function MeineFunktion (

    vVariable             in varchar

) RETURN tMeinDatentyp is...

Bekomme ich den Fehler, dass er das nicht benutzen kann, weils nicht deklariert ist?

Ich weiß wirklich nicht, wie ich das einbauen soll...

Der TYPE ist in Ordnung, über den JAVA ODBC kommt man dann per Array wohl dran. Das wäre mir lieber als dieser Ref Cursor.

Nachtrag: In den anderen Beispielen gab es das auch ohne Declare Befehl. Funktioniert alles nicht. :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

du musst ein package verwenden, da PL/SQL Collection nicht im SQL Kontext erlaubt sind.

In Java

OracleCallableStatement cstmt = null;

long[] deineLongs = new long[maxLength];

cstmt = (OracleCallableStatement) dbUtilsConnection.prepareCall("{?=call mypkg.deineFunc(?)}");

cstmt.registerIndexTableOutParameter(1,maxLength, OracleTypes.NUMBER,0);

cstmt.setString(2,"DeinString");

cstmt.execute();

deineLongs= (long[]) cstmt.getPlsqlIndexTable(1,java.lang.Long.TYPE);

In PL/SQL:

CREATE OR REPLACE PACKAGE MYPKG AS

TYPE tMeinDatentyp IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

FUNCTION meineFunktion(vVariable IN VARCHAR2)RETURN tMeinDatentyp;

END MYPKG;

/

CREATE OR REPLACE PACKAGE BODY MYPKG AS

FUNCTION meineFunktion(vVariable IN VARCHAR2)RETURN tMeinDatentyp IS

retVal tMeinDatentyp;

BEGIN

RETURN retVal;

END;

END MYPKG;

/

Das sollte es gewesen sein.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...