salida - procedure oracle ejemplos
Llame a los procedimientos de miembros de PL/SQL orientados a objetos de Oracle desde JDBC (1)
En jdbc
puede analizar y ejecutar bloques PL / SQL out
variables. Puede preparar una declaración invocable como, por ejemplo:
declare
x foo_type;
begin
x := foo_type(5);
x.proc(10);
? := x.func(2);
end;
Luego puede usar CallableStatement.registerOutParameter y después de que se haya ejecutado la instrucción, use la función get
adecuada para recuperar el valor.
Puede acceder directamente a un tipo de FOO_TYPE
directamente en Java, pero ¿realmente desea hacer esto? Vea a continuación un ejemplo de trabajo:
SQL> create or replace and compile java source named "TestOutParam" as
2 import java.sql.*;
3 import oracle.sql.*;
4 import oracle.jdbc.driver.*;
5
6 public class TestOutParam {
7
8 public static int get() throws SQLException {
9
10 Connection conn =
11 new OracleDriver().defaultConnection();
12
13 StructDescriptor itemDescriptor =
14 StructDescriptor.createDescriptor("FOO_TYPE",conn);
15
16 OracleCallableStatement call =
17 (OracleCallableStatement) conn.prepareCall("declare/n"
18 + " x foo_type;/n"
19 + "begin/n"
20 + " x := foo_type(5);/n"
21 + " x.proc(10);/n"
22 + " ? := x;/n"
23 + "end;/n");
24
25 call.registerOutParameter(1, OracleTypes.STRUCT, "FOO_TYPE");
26
27 call.execute();
28
29 STRUCT myObj = call.getSTRUCT(1);
30
31 Datum[] myData = myObj.getOracleAttributes();
32
33 return myData[0].intValue();
34
35 }
36 }
37 /
Esta es una clase de prueba para mostrar cómo puede usar el método registerOutParameter
en un objeto SQL, vamos a llamarlo:
SQL> CREATE OR REPLACE
2 FUNCTION show_TestOutParam RETURN NUMBER
3 AS LANGUAGE JAVA
4 NAME ''TestOutParam.get() return java.lang.int'';
5 /
Function created
SQL> select show_testoutparam from dual;
SHOW_TESTOUTPARAM
-----------------
20
En PL / SQL orientado a objetos, puedo agregar procedimientos y funciones de miembros a tipos. Un ejemplo se da aquí:
create type foo_type as object (
foo number,
member procedure proc(p in number),
member function func(p in number) return number
);
create type body foo_type as
member procedure proc(p in number) is begin
foo := p*2;
end proc;
member function func(p in number) return number is begin
return foo/p;
end func;
end;
De: http://www.adp-gmbh.ch/ora/plsql/oo/member.html
En PL / SQL, puedo llamar a estos procedimientos / funciones de miembros como este:
declare
x foo_type;
begin
x := foo_type(5);
x.proc(10);
dbms_output.put_line(x.func(2));
end;
¿Cómo puedo hacerlo con CallableStatement de JDBC? Parece que no puedo encontrar esto en la documentación fácilmente.
NOTA : Esta es una posibilidad, alineando el constructor de tipo:
CallableStatement call = c.prepareCall(
" { ? = call foo_type(5).func(2) } ");
Pero lo que estoy buscando es algo así (usando java.sql.SQLData
como parámetro):
CallableStatement call = c.prepareCall(
" { ? = call ?.func(2) } ");
Además, las funciones miembro, los procedimientos pueden modificar el objeto. ¿Cómo puedo recuperar el objeto modificado en Java?