我有一个带输入参数的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
任何人都可以帮助我?
谢谢
答案 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;
/