1

I have a Java function with input parameters (HashMap >String, String> header, String url)

And I want to use Java function in PL/SQL.

I read that the type compatible with PL/SQL is an associative array.

But I spend a lot of hours and I can't find the solution.

I create a package to call java function because in function in PL/SQL can not use associative arrays.

So:

The package:

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;

COMPILE OK

The package body:

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

Anyone can help me?

Thank you

3
  • Error is quiet clear. It says you cannot use associative array. Try with nested table. Commented Apr 4, 2018 at 10:21
  • But i want in Java a type like HashMap<String,String> Commented Apr 4, 2018 at 10:26
  • See stackoverflow.com/questions/12731742/… Commented Apr 4, 2018 at 11:35

1 Answer 1

1

You cannot use a PL/SQL associative array like that - instead use a collection and modify your Java code to take two String arrays: one of keys; and one of values:

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;
/
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you, Finally, i create two array for this, but type java.sql.array: <code>create or replace Function Solicitud_Http_get (headerKeys IN StringList, headerValues IN StringList, url IN VARCHAR2) return VARCHAR2 IS LANGUAGE JAVA NAME 'HTTP_Request.sendGET(java.sql.Array,java.sql.Array,java.lang.String) return java.lang.String';</code>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.