oracle中利用数据字典生成代码

--注意表名用相应表名去替换下面的表名都为oper_log --fb/vo 属性 column properties format a256; select 'private String '||LOWER(A.COLUMN_NAME)||';//'||B.COMMENTS properties FROM user_tab_cols A,user_col_comments B WHERE A.TABLE_NAME=B.TABLE_NAME AND LOWER(A.TABLE_NAME)='oper_log' and a.COLUMN_NAME=b.COLUMN_NAME ; --生成sql语句 --注意Sys_Connect_By_Path参数的字段中有','时不能用','去分隔,改为用'@@',然后再替换为',' --用Sys_Connect_By_Path(COLUMN_NAME, ',')时将行转换成列时,每一行都加',',所以第一个要去掉用substr(str,2) --对日期型的格式为'yyyy-mm-dd hh:MI:ss',可自己替换 column s format a200; Select replace('SELECT '||substr(Sys_Connect_By_Path(COLUMN_NAME, ','),2)||' FROM '||table_name||' WHERE 1=1','@@',',') S From ( SELECT Rownum Rid, DECODE(A.DATA_TYPE,'DATE', 'TO_CHAR('||A.COLUMN_NAME||'@@'||CHR(39)||'yyyy-mm-dd hh:MI:ss'||CHR(39)||') '||A.COLUMN_NAME, A.COLUMN_NAME) COLUMN_NAME,TABLE_NAME FROM USER_TAB_COLS A WHERE A.TABLE_NAME='OPER_LOG' ) Where Rid = ( Select Count(*) FROM USER_TAB_COLS A WHERE A.TABLE_NAME='OPER_LOG' ) start With Rid = 1 Connect By Prior Rid+1 = Rid ; --也可以写成以下这种 column s format a200; --注意Sys_Connect_By_Path参数的字段中有','时不能直接用','去分隔,改为用' , ' Select 'SELECT '||substr(Sys_Connect_By_Path(COLUMN_NAME, ' , '),4)||' FROM '||table_name||' WHERE 1=1' S From ( SELECT Rownum Rid, DECODE(A.DATA_TYPE,'DATE', 'TO_CHAR('||A.COLUMN_NAME||','||CHR(39)||'yyyy-mm-dd hh:MI:ss'||CHR(39)||') '||A.COLUMN_NAME, A.COLUMN_NAME) COLUMN_NAME,TABLE_NAME FROM USER_TAB_COLS A WHERE A.TABLE_NAME='OPER_LOG' ) Where Rid = ( Select Count(*) FROM USER_TAB_COLS A WHERE A.TABLE_NAME='OPER_LOG' ) start With Rid = 1 Connect By Prior Rid+1 = Rid ; --vo设置生成值 --oracle中的initcap与java里的有点区别 --oracle里如user_id用initcap取的是User_Id而java里的是User_id,注意有下划线的要手动修改 column s format a200; SELECT 'vo.set'||initcap(A.COLUMN_NAME)||'(dset.getString("'||A.COLUMN_NAME||'"));' s FROM USER_TAB_COLS A WHERE lower(A.TABLE_NAME)='oper_log' ;[@more@]
请使用浏览器的分享功能分享到微信等