Match string of type java [] with type of oracle

There is some java class loaded into the Oracle database (version 11g) and pl / sql function-wrapper:

create or replace function getDataFromJava( in_uListOfSms  in tStringArray )
return tStringArray    
as language java name 'JavaClass.getSms( java.lang.String[]) return java.lang.String[]';    

as you can see from the example, I am trying to map java datatype "java.lang.String []" to the Oracle data type:

create or replace type tStringArray as table of varchar2(4000);

and then when I ran this code:

declare
  in_array  tStringArray := tStringArray();    
  out_array tStringArray := tStringArray();    
begin    

  in_array.EXTEND;    
  in_array(1) := '1';    
  in_array.EXTEND;    
  in_array(2) := '2';    
  in_array.EXTEND;    
  in_array(3) := '3';    

    out_array := getDataFromJava( in_array );    

      for i in 1..3    
      loop    
        dbms_output.put_line(out_array(i));    
      end loop;    
end;    

As a result, I get the error:

ORA-00932: inconsistent datatypes expected a java type at argument position 2 to which some Oracle value can be converted got something else   
+4
source share
1 answer

, ! ​​ , java String [] datatape " varchar2". . / //, datatype oracle.sql.ARRAY. :

  • oracle:

    tFilesList AS VARCHAR2 (2000);

  • , oracle.sql.ARRAY:

    java "DirInfo"

import java.io.File;    
import java.sql.*;    
import oracle.sql.*;    
import oracle.jdbc.*;    

public class DirInfo {    

  public static oracle.sql.ARRAY getFilesList (String dirName) throws java.sql.SQLException {    

      Connection orclConnection = new OracleDriver().defaultConnection();    

      ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor ("TFILESLIST", orclConnection);    

      File filesDir = new File (dirName);    

      String[] filesList = filesDir.list();    

      ARRAY dirArray = new ARRAY(arrayDesc, orclConnection, filesList);    

      return dirArray;    
  }
}
  1. - pl/sql:

    getDirList (dirName varchar2)
    return tFilesList

    language java name 'DirInfo.getFilesList(java.lang.String) return
    oracle.sql.ARRAY ';

  2. :

 declare    
       myDdir tFilesList;    
    begin    
      myDdir := getDirList ('C:\Program Files');    
        for i in 1..myDdir.COUNT    
        loop    
          dbms_output.put_line(myDdir(i));    
        end loop;    
    end;
0

Source: https://habr.com/ru/post/1569077/


All Articles