用oracle定义一个函数,怎么定义?

我想在这个函数里面,接收两个参数:一个是数值类型的参数(table_id),一个是字符串类型的参数(str),让这个函数执行这条sql,并且把结果返回,返回的结果是单行单列的数据
这个是sql:
select flag_name from PU_META_PLAT.MD_META_DIM_CODE where dim_table_id = 参数1(数值类型) and flag_code in (
SELECT trim(substr(',' || 参数2(字符串类型) || ',', instr(',' || 参数2(字符串类型) || ',', ',', 1, LEVEL)+1,
instr(',' || 参数2(字符串类型) || ',', ',', 1, LEVEL + 1)-instr(',' || 参数2(字符串类型) || ',', ',', 1, LEVEL)-1))
FROM dual
CONNECT BY LEVEL <= (length(',' || 参数2(字符串类型) || ',')-length(replace(',' || 参数2(字符串类型) || ',', ',', '')))/1-1
)
)

create or replace function test(p1 in number, p2 in varchar2)
  return varchar2 is
  v_out varchar2(200);
begin
  select flag_name
    into v_out
    from PU_META_PLAT.MD_META_DIM_CODE
   where dim_table_id = p1
     and flag_code in
         (SELECT trim(substr(',' || p2 || ',',
                             instr(',' || p2 || ',', ',', 1, LEVEL) + 1,
                             instr(',' || p2 || ',', ',', 1, LEVEL + 1) -
                             instr(',' || p2 || ',', ',', 1, LEVEL) - 1))
            FROM dual
          CONNECT BY LEVEL <=
                     (length(',' || p2 || ',') -
                     length(replace(',' || p2 || ',', ',', ''))) / 1 - 1));
  return v_out;
exception
  when others then
    return null;
end;

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答