2

EclipseLinkを使用してsys_refcursorを返すOracle関数を呼び出す方法は?

関数の呼び出しについて述べたドキュメントがありますが、sys_refcursor を返す関数を呼び出す方法がわかりません。

http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_namedstoredfunctionquery.htm

私は次のように試しました

@NamedStoredFunctionQuery(name = "findEmployees", 
                          functionName = "getEmps", 
                          parameters = 
                          { @StoredProcedureParameter(queryParameter = "user", 
                                                      name = "username", 
                                                      direction = Direction.IN, 
                                                      type = String.class)
            } , 
    returnParameter = @StoredProcedureParameter(queryParameter = "c_cursor")
)

オラクル機能

CREATE or REPLACE FUNCTION getEmps (username varchar2)
      RETURN SYS_REFCURSOR
   AS
   c_cursor   SYS_REFCURSOR;
   BEGIN
   OPEN c_cursor FOR 
   SELECT * FROM employees where emp_no=username;
   RETURN c_cursor;

ただし、実行すると、次のエラーが発生します

内部例外: java.sql.SQLException: ORA-06550: 行 1、列 13: PLS-00382: 式の型が正しくありません ORA-06550: 行 1、列 7: PL/SQL: ステートメントは無視されました

エラー コード: 6550 呼び出し: BEGIN ? := getEmps(ユーザー名=>?); 終わり; bind => [=> c_cursor, S7845] クエリ: org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:378) の DataReadQuery(name="findEmps" ) org.eclipse.persistence.internal. jpa.QueryImpl.executeReadQuery(QueryImpl.java:260) at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469)

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

Direction関数パラメーターの を指定する必要があると思います

CREATE or REPLACE FUNCTION getEmps (username IN varchar2)
      RETURN SYS_REFCURSOR
   AS
   c_cursor   SYS_REFCURSOR;
   BEGIN
   OPEN c_cursor FOR 
   SELECT * FROM employees where emp_no=username;
   RETURN c_cursor;

試してみてください!

于 2015-01-15T13:58:03.960 に答える