Avatar billede simonvalter Praktikant
09. februar 2004 - 18:16 Der er 7 kommentarer og
1 løsning

stored procedure oracle / jdbc

jeg prøver at finde ud af hvordan man bruger stored procedures men det vil ikke rigtigt som jeg vil


jeg har oprettet min procedure sådan her

-------------------------------------------------------------
CREATE OR REPLACE PROCEDURE "LOADET"."TEST" (action_in IN VARCHAR2, name_in IN VARCHAR2 := NULL)
IS
BEGIN
IF action_in = 'DELETE'
THEN
DELETE FROM KUNDER WHERE navn = name_in;
ELSIF action_in = 'INSERT'
THEN
INSERT INTO KUNDER (Navn)
VALUES (name_in);
END IF;
END;
-----------------------------------------------------



jeg connecter til oracle .. det virker da jeg kan lave alm querys/updates

          Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection forb = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:test", "user", "pass");
            Statement stmt = forb.createStatement();

// jeg prøver at slette kunden simon

        CallableStatement bla = forb.prepareCall("call test ?,?)");
        bla.setString("DELETE","simon");
        bla.execute();


og så får jeg en
java.sql.SQLException: Ikke-understøttet facilitet

hvad gør jeg forkert?
Avatar billede arne_v Ekspert
09. februar 2004 - 18:32 #1
Prøv med:

bla.setString(1, "DELETE");
bla.setString(2, "simon");
Avatar billede arne_v Ekspert
09. februar 2004 - 18:33 #2
Der mangler vel også en (

forb.prepareCall("call test(?,?)");
Avatar billede simonvalter Praktikant
09. februar 2004 - 18:35 #3
hehe ja fandt lige ud af det .. smid et svar
Avatar billede arne_v Ekspert
09. februar 2004 - 18:39 #4
ok
Avatar billede arne_v Ekspert
09. februar 2004 - 18:39 #5
Jeg lavede engang et lille SP eksempel med output parameter, retur værdi og
flere result set. Har du set det ?
Avatar billede simonvalter Praktikant
09. februar 2004 - 18:43 #6
nej, men jeg vil meget gerne
Avatar billede arne_v Ekspert
09. februar 2004 - 18:47 #7
Det er ikke Oracle men Sybase/MS SQLServer, men det burde ikke betyde noget.

CREATE PROCEDURE TEST_MULTIOUT
@inarg INTEGER,
@outarg INTEGER OUTPUT
AS
SELECT @outarg = 123
SELECT * FROM T1
SELECT * FROM T1
RETURN -@inarg

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Types;

public class UseSP {
    public static void main(String[] args) throws Exception {
        Class.forName("com.sybase.jdbc2.jdbc.SybDriver");
        Connection con = DriverManager.getConnection("jdbc:sybase:Tds:arnepc2:5000", "sa", "");
        con.setCatalog("Test");
        CallableStatement cstmt = con.prepareCall("{? = CALL TEST_MULTIOUT(?,?)}");
        cstmt.registerOutParameter(1, Types.INTEGER);
        cstmt.setInt(2, 5);
        cstmt.registerOutParameter(3, Types.INTEGER);
        cstmt.execute();
        while(cstmt.getMoreResults()) {
            ResultSet rs = cstmt.getResultSet();
            while(rs.next()) {
                System.out.println(rs.getInt(1) + " " + rs.getString(2));
            }
        }
        System.out.println("return value = " + cstmt.getInt(1));
        System.out.println("out parameter = " + cstmt.getInt(3));
        cstmt.close();
        con.close();
    }
}

[eksemplet er selvfølgeligt tåbeligt men det illusterer alle mulighederne]
Avatar billede simonvalter Praktikant
09. februar 2004 - 18:49 #8
ok tak, det kan jeg bruge så snart jeg får fundet ud af hvordan jeg kan lave en procedure der retunerer noget i oracle ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester