[oracle自定义函数]根据数据库表生成对应java代码的实体类属性

一、问题描述

现有一张学生表(student),

需要编写一个函数实现下图的输出:

(1)暂时不考虑数据库表字段类型和java代码中字段类型的对应关系,一律用String(这个后续在函数中添加判断就行)

(2)能获取字段名,及字段注释

二、代码实现

create or replace type "T_RET_TABLE" as table of varchar2(1000);
create or replace function "FN_GENERATE_ENTITY"(vc_table_name in varchar2)
return t_ret_table pipelined is
v_sql varchar2(2000);
vc_field_name varchar2(200); --字段在实体类中的名称
result_cur sys_refcursor;--存放动态sql的执行结果
--功能:根据数据库的表字段生成对应的java实体类代码
/* 使用示例:
   select * from table(FN_GENERATE_ENTITY('student'));
*/
begin
  v_sql:='select ''private String '' ||' ||
       'lower(regexp_substr(regexp_replace(initcap(ut.COLUMN_NAME), ''Vc_|D_'', ''''),''^.'')) ||' ||
       'regexp_replace(regexp_replace(regexp_replace(initcap(ut.COLUMN_NAME), ''Vc_|D_'', ''''),''^(.)'',''''),''_'','''') || '';'' ||' ||
       ''' //'' || ucc.comments ' ||
      'from user_tab_cols ut ' ||
      'left join user_col_comments ucc ' ||
       'on (ut.TABLE_NAME = ucc.table_name and ut.COLUMN_NAME = ucc.column_name) ' ||
     'where ut.TABLE_NAME = upper('''|| vc_table_name ||''') order by ut.column_id';
 open result_cur for v_sql;
  fetch result_cur into vc_field_name;
  loop
    exit when not result_cur%found;
    --dbms_output.put_line(vc_field_name);
    pipe row(vc_field_name);
    fetch result_cur into vc_field_name;
  end loop;
  close result_cur;
end;

至于整个的思考过程,可以看看我以前编写其他函数的思考过程(https://blog.csdn.net/u010999809/article/details/79940218),因为怎么得到的过程其实远比拿到一个结果更重要。最近比较忙,以后有时间把过程给补一下吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值