我有一个带有输入参数的 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;
编译失败
Error(17,30): PLS-00999: restricción de implantación (puede ser temporal) INDEX TABLE BY CHAR/VARCHAR2 parameters are disallowed
有人可以帮助我吗?
谢谢
最佳答案
您不能使用这样的 PL/SQL 关联数组 - 而是使用集合并修改您的 Java 代码以获取两个字符串数组:键之一;和值之一:
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;
/
关于java - 在 pl/sql 中将关联数组传递给 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49648081/