Het probleem is heel eenvoudig, ik roep deze procedure op in java, hij geeft geen foutmeldingen,
maar in "v_id" wordt geen waarde geplaatst, met als gevolg dat er niks wordt geupdated. Als 'k gewoon in de declaratie v_id:=5 invul, doet hij het wel.
Hiervoor heb 'k een oplossing gevonden, namelijk FETCH ref_cursor INTO v_id; maar dan krijg 'k
geen cursor terug in java en kan 'k bijvoorbeeld men id niet meer ophalen. Iemand een id?
Dank
Bartje
mijn procedure:
java code voor het ophalen van bv. de id:
maar in "v_id" wordt geen waarde geplaatst, met als gevolg dat er niks wordt geupdated. Als 'k gewoon in de declaratie v_id:=5 invul, doet hij het wel.
Hiervoor heb 'k een oplossing gevonden, namelijk FETCH ref_cursor INTO v_id; maar dan krijg 'k
geen cursor terug in java en kan 'k bijvoorbeeld men id niet meer ophalen. Iemand een id?
Dank
Bartje
mijn procedure:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| CREATE OR REPLACE PACKAGE pack_logincontr_verifylogin AS TYPE cursor_type IS REF CURSOR; PROCEDURE usp_logincontr_verifylogin(p_username IN VARCHAR2, p_password IN VARCHAR2, ref_cursor OUT cursor_type); END; / CREATE OR REPLACE PACKAGE BODY pack_logincontr_verifylogin AS PROCEDURE usp_logincontr_verifylogin( p_username IN VARCHAR2, p_password IN VARCHAR2, ref_cursor OUT cursor_type ) AS v_id dusers.id%TYPE; BEGIN OPEN ref_cursor FOR SELECT a.id INTO v_id FROM dusers a, usergroups b WHERE a.usergroups_id = b.id AND a.username = p_username AND a.password = p_password; UPDATE dusers SET accessed = SYSDATE WHERE id = v_id; END; END; / |
java code voor het ophalen van bv. de id:
Java:
1
2
3
4
5
6
7
8
9
10
11
| proc = connection.prepareCall("{ call pack_logincontr_verifylogin.usp_logincontr_verifylogin(?,?,?) } "); proc.setString(1, "dimi987"); proc.setString(2, "password"); proc.registerOutParameter(3, OracleTypes.CURSOR); proc.execute(); ResultSet rs = (ResultSet) proc.getObject(3); while (rs.next()){ System.out.println(rs.getInt(1)); } |