tipos salida procedimientos procedimiento parametros funciones ejemplos ejecutar con bloques almacenado oracle oop stored-procedures jdbc plsql

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?