我有一个功能,我希望根据参数从表中获取信息。
p_text就像' name' ,或者发送电子邮件'或者生日'所以在我的cursist表中,就像调用select cursist.name,cursist.email或cursist.birthday。
get_cursist_info(p_app =>:APP_USER,p_text =>' name')
这是我的功能:
create or replace function get_cursist_info(p_app in varchar2, p_text in varchar2)
return varchar
is
v_userid varchar(200);
v_text varchar(200);
v_test varchar(200):= p_text;
begin
v_userid := get_cursist_id2(p_app);
select v_test
into v_text
from cursist
where cursist.cursistid = v_userid;
return v_text;
end get_cursist_info;
它现在所做的就是获取变量v_test(名称)而不是cursists名称(Dave)。
是否可以在select中使用pl sql变量?我真的不想为此制作8个函数.. :)
答案 0 :(得分:0)
您需要动态创建查询:
create or replace function get_cursist_info(p_app in varchar2, p_text in varchar2)
return varchar
is
v_userid varchar2(200);
v_text varchar2(200);
v_test varchar2(200):= p_text;
v_sql varchar2(1000);
begin
v_userid := get_cursist_id2(p_app);
v_sql := 'select cursist.' || v_test || ' from cursist where cursist.cursistid = ' || v_userid;
execute immediate v_sql into v_text;
return v_text;
end get_cursist_info;
希望有所帮助。
答案 1 :(得分:0)
您可以在没有使用CASE子句效率较低的动态sql的情况下执行此操作:
select CASE v_test
WHEN 'name' THEN name
WHEN 'email' THEN email
WHEN 'birthday' THEN birthday
ELSE null
END
into v_text
from cursist
where cursist.cursistid = v_userid;