传入选择别名的参数

时间:2013-11-15 07:59:40

标签: oracle plsql oracle11g

在一个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,我作为参数传递而不是列值。

1 个答案:

答案 0 :(得分: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;

否则,Oracle认为您只想选择值本身。