2016-06-23 14 views
1

を使用して:呼び出しストアドプロシージャのOracleパラメータ配列私はこのコードを持っているのScala/Javaの

手順:

CREATE OR REPLACE PACKAGE BODY PKG_ARRAY AS PROCEDURE PARAAJA_BULK(P_INPUTS IN PARAAJAARRAY) 
IS BEGIN 
     FOR I IN 1 .. P_INPUTS.COUNT LOOP 

      INSERT INTO PARA_AJA 
      (FIELD1, FIELD2) 
      VALUES 
      (P_INPUTS(I).FIELD1, P_INPUTS(I).FIELD2); 
     END LOOP; END; 

    END; 

とScalaのコード:

def spArray(name: List[person2],con:Connection) = Future[Boolean] { //supaya output jadi Future 

    DriverManager.registerDriver(new OracleDriver()) 
    val conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=xxxx))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=xxxx)))", "tesschema", "1234") 
    var callableStatement: CallableStatement = conn.prepareCall("call PKG_ARRAY.PARAAJA_BULK(?)") 

    val des = ArrayDescriptor.createDescriptor("PKG_ARRAY.PARAAJAARRAY", conn) 
    val array_to_pass = new ARRAY(des, conn, name) 

    callableStatement.setArray(1, array_to_pass) 
    callableStatement.execute() 

    } 

をしかし、私は問題を抱えています!

無効な名前パターン:JavaでPKG_ARRAY.PARAAJAARRAY

...

答えて

1

私のようなOracleプロシージャを使用:

CallableStatement cstmt = Connection.prepareCall("{CALL CmdtyStndrd.CmdtyStndrdProc(?)}"); 
cstmt.registerOutParameter(1, array_to_pass); 
cstmt.execute(); 

、それが動作します。

+0

また、[Anorm](https://www.playframework.com/documentation/2.5.x/ScalaAnorm)を使用してScalaで(もっと簡単に) – cchantep

0

PARAAJAARRAYは、パッケージレベルで定義された型ではなく、スキーマレベルで定義された型である必要があります。 CREATE OR REPLACE TYPE PARAAJAARRAYをTABLE OF(レコード・オブジェクト・タイプ)としてタイプを作成してみてください。

関連する問題