loading ...
loading...

2008-06-30 | 自动生成表变量参数

分享
标签: oracle 

方法一:


  SELECT REPLACE(STR,'|',CHR(13)||CHR(10)) FROM
  (
  (SELECT substr(MAX(SYS_CONNECT_BY_PATH(column_name,
                                                                  '|' )),
                                           2)  AS STR
                               FROM (SELECT ROWNUM AS ROW_NUM, column_name
                                       FROM (SELECT *
                                               FROM (SELECT
                                                            'P_'||COLUMN_NAME||' '||TABLE_NAME||'.'||COLUMN_NAME||'%TYPE, --'||REPLACE(COMMENTS,chr(13),' ') AS COLUMN_NAME
                                                      FROM USER_COL_COMMENTS
                                                            WHERE TABLE_NAME ='OKFORM'

                                                         )
                                          ))
                              START WITH ROW_NUM = 1
                             CONNECT BY ROW_NUM = ROWNUM) )


这个就把OKFORM这个表的所有字段的定义都列出来了,如下:

P_FORMCLASSNAME OKFORM.FORMCLASSNAME%TYPE, --窗体类名
P_CAPTION OKFORM.CAPTION%TYPE, --标题
P_PARENT OKFORM.PARENT%TYPE, --父窗体类
P_FORM_TYPE OKFORM.FORM_TYPE%TYPE, --类型(0-不显示 1-显示)
P_FORM_ORDER OKFORM.FORM_ORDER%TYPE, --次序
P_SHORTCUT OKFORM.SHORTCUT%TYPE, --快捷键



为了便于使用,我把上面的sql封装成了一个函数:

-- 功能点:得到表变量参数
  FUNCTION get_tab_cols_param
  (
    p_table_name VARCHAR2, --表名
    p_prefix     CHAR:= 'P', --变量或参数前缀
    p_separator  char:=','   --各个变量间的分隔符
   
   
  ) RETURN VARCHAR2 IS
    v_value VARCHAR2(4000);
  BEGIN
    SELECT REPLACE(STR, '|', CHR(13) || CHR(10))
      INTO v_value
      
      FROM ((SELECT substr(MAX(SYS_CONNECT_BY_PATH(column_name, '|')), 2) AS STR
               FROM (SELECT ROWNUM AS ROW_NUM, column_name
                       FROM (SELECT *
                               FROM (SELECT p_prefix|| '_' || COLUMN_NAME || ' ' ||
                                            TABLE_NAME || '.' || COLUMN_NAME ||
                                            '%TYPE'||p_separator||' --' ||
                                            REPLACE(COMMENTS, chr(13), ' ') AS COLUMN_NAME
                                       FROM USER_COL_COMMENTS
                                      WHERE TABLE_NAME = p_table_name
                                    
                                     )))
              START WITH ROW_NUM = 1
             CONNECT BY ROW_NUM = ROWNUM));
   
    RETURN v_value;      
  
  END;

方法二:

CREATE OR REPLACE VIEW VW_TAB_COLS_PARAM
AS
SELECT TABLE_NAME,   COLUMN_NAME || ' ' || TABLE_NAME || '.' || COLUMN_NAME ||'%TYPE'|| ',' ||' --' ||COMMENTS
AS PARAM
FROM USER_COL_COMMENTS

比如:
SELECT 'p_'||PARAM FROM VW_TAB_COLS_PARAM
WHERE TABLE_NAME='OKFORM'

 

 

分享 分享 |  评论 (0) |  阅读 (?)  |  固定链接 |  类别 (Oracle技术) |  发表于 13:29  | 最后修改于 2008-06-30 13:29
搜狐博客温馨提示:警惕博客留言诈骗, 搜狐博客管理员的正确地址为http://admin.blog.sohu.com, 其他都是冒牌。搜狐博客官方不会要求参加活动的各位博友缴纳任何的手续费用。请勿轻信留言、评论中的中奖信息,更不要拨打陌生电话及向陌生帐户汇款,谨防受骗!识别更多网络骗术,请 点击查看详情
您还未登录,只能匿名发表评论。或者您可以 登录 后发表。
 
  与您共话财富健康,让您的财富增值更多!
表  情:
加载中...
回复通知: 同时用小纸条通知对方该回复