0

Pl sql 関数では、select ステートメントのエイリアスに varchar パラメータを渡す必要があります。たとえば、以下のようなもの、

create or replace
FUNCTION XX_FUNC_TEST (p_id in varchar2 , p_app_type in varchar2) RETURN varchar2 IS

appl_type_r varchar2(20);

BEGIN
  SELECT p_app_type 
  INTO appl_type_r
  FROM YY_TABLE
  WHERE trans_id = p_id;

  dbms_output.put_line(appl_type_r);

  RETURN appl_type_r;

END XX_FUNC_TEST;

したがって、実際の列名はapplicant_typeであり、パラメーターとして渡します。しかし、私が得る出力は、列の値ではなくパラメーターとして渡すapplicant_typeです。

4

1 に答える 1

1

これは、クエリを動的に作成する必要があるためです。

CREATE OR REPLACE FUNCTION XX_FUNC_TEST (p_id in varchar2 , p_app_type in varchar2) RETURN VARCHAR2 IS
    appl_type_r VARCHAR2(20);
    sql VARCHAR2(2000);
BEGIN
    sql := 
        'SELECT ' || p_app_type || ' ' ||
        'FROM YY_TABLE ' ||
        'WHERE trans_id = p_id';

    EXECUTE IMMEDIATE sql INTO appl_type_r;
    DBMS_OUTPUT.PUT_LINE(appl_type_r);

    RETURN appl_type_r;
END XX_FUNC_TEST;

それ以外の場合、オラクルは、値自体を選択したいだけだと考えます。

于 2013-11-15T08:06:52.557 に答える