在一个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,我作为参数传递而不是列值。
答案 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认为您只想选择值本身。