[英]How to return an array from Java to PL/SQL?
從PL / SQL到Java來回傳遞數字和字符串沒有問題,但是如何傳遞數組呢? 我從PL / SQL調用Java - 而不是其他方式。
下面是get_widgets_as_string
按預期工作的示例。 如何為so19j.get_widgets_as_array()
編寫PL / SQL 調用規范 ,以便我可以從PL / SQL調用它?
我已經閱讀了發布帶有調用規范的Java類 ,我可以看到嵌套表對應於oracle.sql.ARRAY
,但是我無法使其工作。 我可能錯過了一些微不足道的細節,因為我不是Java程序員。
create or replace and compile java source named "so19j" as
import java.lang.*;
public class so19j {
public static String get_widgets_as_string() {
String widgets = "foo;bar;zoo";
return widgets;
}
public static String[] get_widgets_as_array() {
String[] widgets = new String[]{"foo", "bar", "zoo"};
return widgets;
}
};
/
show errors java source "so19j"
create or replace function get_widgets_as_string return varchar2 as
language java name 'so19j.get_widgets_as_string() return java.lang.String';
/
show errors
declare
widgets constant varchar2(32767) := get_widgets_as_string;
begin
dbms_output.put_line('widgets = ' || widgets);
end;
/
/* How to write a call specification for so19j.get_widgets_as_array so that it
can be excercised by the PL/SQL block below ? */
declare
type widgets_t is table of varchar2(32767);
widgets constant widgets_t := get_widgets_as_array;
begin
for i in widgets.first .. widgets.last loop
dbms_output.put_line('widgets(' || i || ') = ' || widgets(i));
end loop;
end;
/
/* The type has to be SQL type so that it is also visible for Java. */
create or replace type widgets_t is table of varchar2(32767);
/
create or replace and compile java source named "so19ja" as
import java.lang.*;
public class so19ja {
public static String[] get_widgets_as_array() {
String[] widgets = new String[]{"foo", "bar", "zoo"};
return widgets;
}
public static java.sql.Array array_wrapper(
String typeName,
Object elements
) throws java.sql.SQLException {
oracle.jdbc.OracleDriver ora = new oracle.jdbc.OracleDriver();
java.sql.Connection conn = ora.defaultConnection();
oracle.jdbc.OracleConnection oraConn =
(oracle.jdbc.OracleConnection)conn;
/* Yeah - typeName have to be UPPERCASE, really. */
java.sql.Array arr =
oraConn.createARRAY(typeName.toUpperCase(), elements);
return arr;
}
public static java.sql.Array get_widgets_as_array_wrapped()
throws java.sql.SQLException {
return array_wrapper("widgets_t", get_widgets_as_array());
}
};
/
show errors java source "so19ja"
create or replace function get_widgets_as_array return widgets_t as
language java name 'so19ja.get_widgets_as_array_wrapped() return java.sql.Array';
/
show errors
declare
widgets constant widgets_t := get_widgets_as_array;
begin
for i in widgets.first .. widgets.last loop
dbms_output.put_line('widgets(' || i || ') = ' || widgets(i));
end loop;
end;
/
打印:
widgets(1) = foo
widgets(2) = bar
widgets(3) = zoo
PL/SQL procedure successfully completed.
另請參見: 如何創建oracle.sql.ARRAY對象?
我不知道pl / sql的事情,但你可以做的是處理PL / SQL的結果並將結果插入到set方法中,然后你就可以得到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.