用pl/sql写一个select语句

如果我们项目中使用dao层的技术是Mybatis的话,我们就需要实体类映射。

有的时候项目的中表字段很多,通常都是几十个上百个的。我们手写会遇到,想要查询的语句会很麻烦。尤其不仅仅是字段多。而是那些字段的奇葩命名叫人苦不堪言。

通常需要 select * from table;这一个简单的操作我们要花费很多的时间去拼接为:

select  a,b,c,d,e...... from table;

下面是我同事提供的一个语句,直接在pl/spl上执行就可以获得不错的效果。

declare
V_Str VARCHAR(32000);
V_Table_Name VARCHAR(40);
begin
  V_Table_Name := 'SCTS_JIT_CALLOF_CV';--输入需要的表名就可以得到select语句了。
  V_Str := 'select ';
  for vo in(select * from user_tab_columns t where t.TABLE_NAME=V_Table_Name) loop
    if vo.data_type='DATE' then
       V_Str := V_Str || 'to_char(t.' || vo.column_name ||',''yyyy-MM-dd HH24:mi:ss'')' || vo.column_name ||',';
    else
       V_Str := V_Str || 't.' || vo.column_name ||',';
    end if;
  end loop;
  V_Str := substr(V_Str, 1, length(V_Str) - 1);  
  V_Str := V_Str||' from '||V_Table_Name||' t';
  DBMS_OUTPUT.put_line(V_Str);
end;

执行完毕后会生成SQL,用PL/SQL格式化就好了。效果如下:

select t.SN,
       t.WITHIN_CODE,
       t.MATNR,
       t.MAKTX,
       t.WERKS,
       t.LIFNR,
       t.NAME1,
       t.CREATE_BY,
       to_char(t.CREATE_DATE, 'yyyy-MM-dd HH24:mi:ss') CREATE_DATE,
       t.UPDATE_BY,
       to_char(t.UPDATE_DATE, 'yyyy-MM-dd HH24:mi:ss') UPDATE_DATE,
       t.BATCH_NO,
       to_char(t.BATCH_DATE, 'yyyy-MM-dd HH24:mi:ss') BATCH_DATE
  from SCTS_PART_SUPPLIER_CV t

猜你喜欢

转载自blog.csdn.net/qq_36026747/article/details/81328153
今日推荐