将关联数组传递给pl / sql中的java

时间:2018-04-04 09:56:30

标签: java oracle plsql

我有一个带输入参数的Java函数(HashMap> String,String> header,String url)

我想在PL / SQL中使用Java函数。

我读到与PL / SQL兼容的类型是一个关联数组。

但是我花了很多时间才找到解决方案。

我创建了一个调用java函数的包,因为PL / SQL中的函数不能使用关联数组。

所以:

包裹:

create or replace PACKAGE            SOLICITUDES_HTTP AS
 TYPE map_varchar2 IS TABLE OF VARCHAR2(255) INDEX BY VARCHAR2(255);
        Function Solicitud_Http_get (header IN map_varchar2,
    url IN VARCHAR2) return VARCHAR2;
END SOLICITUDES_HTTP;

编译确定

包体:

create or replace PACKAGE BODY SOLICITUDES_HTTP AS   
Function Solicitud_Http_get (header IN map_varchar2,
url IN VARCHAR2) 
RETURN VARCHAR2
IS LANGUAGE JAVA
NAME 'HTTP_Request.sendGet(java.util.HashMap,java.Lang.String) return java.lang.String';
END SOLICITUDES_HTTP;

COMPILE FAILS

Error(17,30): PLS-00999: restricción de implantación (puede ser temporal) INDEX TABLE BY CHAR/VARCHAR2 parameters are disallowed

任何人都可以帮助我?

谢谢

1 个答案:

答案 0 :(得分:1)

你不能像这样使用PL / SQL关联数组 - 而是使用一个集合并修改你的Java代码来获取两个String数组:一个键;和其中一个价值观:

CREATE TYPE StringList IS TABLE OF VARCHAR2(255)
/

CREATE PACKAGE SOLICITUDES_HTTP AS
  FUNCTION Solicitud_Http_get(
    header_keys   IN StringList,
    header_values IN StringList,
    url           IN VARCHAR2
  ) return VARCHAR2;
END SOLICITUDES_HTTP;
/

CREATE PACKAGE BODY SOLICITUDES_HTTP AS
  FUNCTION Solicitud_Http_get(
    header_keys   IN StringList,
    header_values IN StringList,
    url           IN VARCHAR2
  ) return VARCHAR2
  IS LANGUAGE JAVA
    NAME 'HTTP_Request.sendGet(java.lang.String[],java.lang.String[],java.Lang.String) return java.lang.String';
END SOLICITUDES_HTTP;
/