oracle中利用数据字典生成代码
-
zgy13121
2008-10-18 13:57:38
-
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@]