0

在 Pl sql 函数中需要传入 varchar 参数作为 select 语句的别名。例如像下面这样的东西,

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;

所以它就像真正的列名是申请人类型,我作为参数传递。但是我得到的一些输出是申请人类型,我将其作为参数而不是列值传递。

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;

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

于 2013-11-15T08:06:52.557 回答