2

OracleでDBLINKを使用して関数を呼び出すことは可能ですか? このような関数を呼び出して、エラーが発生します - ORA-00904: "MC"."GET_REFTYPES": 無効な識別子

select column_value from table(mc.Get_REFTYPES@READ_MAIN_MCNAV(param1, param2, param3)));

機能コード

CREATE OR REPLACE FUNCTION "MC"."Get_REFTYPES"(
  param1 IN VARCHAR, 
  param2  IN NUMBER, 
  param3  IN DATE DEFAULT SYSDATE
  )
  RETURN RefType_T PIPELINED IS

  CURSOR cur_st (
    cur_param1 VARCHAR, 
    cur_param2  NUMBER,
    cur_param3  DATE
    ) IS
            select 
              TypeID
            FROM ......
          WHERE......... ;

  t_st Types_T;  -- Table variable to store return values       

 BEGIN

    OPEN cur_st(param1, param2 , param3 );
    FETCH cur_st BULK COLLECT INTO t_st;
    CLOSE cur_st;

    FOR i IN 1..t_st.COUNT LOOP
            PIPE ROW(t_st(i));
    END LOOP;
    RETURN;
END;

ありがとう!

4

1 に答える 1

6

関数は、引用符で囲まれた識別子で宣言されています:

CREATE OR REPLACE FUNCTION "MC"."Get_REFTYPES"(

のように、引用符なしで呼び出していますmc.Get_REFTYPES@READ_MAIN_MCNAV(...)。引用符で囲まれた識別子が引き起こす苛立ちの 1 つは、常に元の定義とまったく同じケースで引用符を付けてそれらを参照する必要があることです。そのため、次のようにする必要があります。

select column_value
from table(mc."Get_REFTYPES"@READ_MAIN_MCNAV(param1, param2, param3)));

mcとにかく、引用符付きの大文字の識別子は引用符なしの識別子のように動作するため、引用する必要はありません。

ただし、それを修正しても、これはあなたが望むことにはなりません。この回答で説明したように、のようなユーザー定義型を返す関数を呼び出すことはできず、RefType_T「ORA-30626: リモート オブジェクト型の関数/プロシージャ パラメータはサポートされていません」というメッセージが表示されます。

于 2016-03-08T19:44:50.657 に答える