Chinaunix首页 | 论坛 | 博客
  • 博客访问: 127668
  • 博文数量: 25
  • 博客积分: 1543
  • 博客等级: 上尉
  • 技术积分: 271
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-07 16:40
文章分类

全部博文(25)

文章存档

2011年(6)

2010年(19)

我的朋友

分类: Mysql/postgreSQL

2010-09-05 00:20:19

有一个sql格式化的网站,可以将凌乱的语句格式化成多种数据库SQL格式。
它还有单机版的,网上有破解版。但有一些小瑕疵,就是对中文的支持有时候会显示成乱码,这让我有些不爽。
今天找到一个vim插件,可以轻松格式化SQL而且功能强大,此插件依赖插件。

安装 sqluti

cp -r autoload ~/.vim
cp -r plugin ~/.vim
cp -r doc ~/.vim

安装 Align

vim Align.vba.gz
:so %
:q


贴下我的vimrc相关配置

vmap <leader>sf <Plug>SQLU_Formatter<CR>
nmap <leader>scl <Plug>SQLU_CreateColumnList<CR>
nmap <leader>scd <Plug>SQLU_GetColumnDef<CR>
nmap <leader>scdt <Plug>SQLU_GetColumnDataType<CR>
nmap <leader>scp <Plug>SQLU_CreateProcedure<CR>
let g:sqlutil_load_default_maps = 1


执行格式化
v 进入可视化模式,选中要格式化的语句,然后:'<,'>SQLUFormatter 或
命令模式下执行 :始行号,末行号SQLUFormatter 另外还有两种方法help sqlutilities有描述。
此插件还有许多选项供调整格式化后的语句样式可参考帮助文件。

示例
格式化前

SELECT m.MSG_ID, m.PRIORITY_ID, CUST.CUST_NBR, CUST.CUST_NM,
    CUST.CUST_LEGAL_NM, CUST.STORE_ADDR_1, CUST.STORE_ADDR_2,
    CUST.CROSS_STREET, XMLELEMENT( 'Alerts', XMLELEMENT( 'Alert_alert_id',
    alert_id ), XMLELEMENT( 'Alert_agent_id', agent_id ), XMLELEMENT(
    'Alert_alert_type_id', alert_type_desc), XMLELEMENT(
    'Alert_alert_date', alert_date), XMLELEMENT(
    'Alert_url_reference', url_reference), XMLELEMENT(
    'Alert_read_status', read_status )) CUST.STORE_CITY,
    CUST.STORE_ST, CUST.POST_CODE, CUST.STORE_MGR_NM, FROM MESSAGES m JOIN
    PRIORITY_CD P WHERE m.to_person_id = ? AND p.NAME = 'PRI_EMERGENCY' AND
    p.JOB = 'Plumber' AND m.status_id < ( SELECT s.STATUS_ID FROM
    MSG_STATUS_CD s WHERE s.NAME = 'MSG_READ') ORDER BY m.msg_id desc


格式化后

SELECT m.MSG_ID, m.PRIORITY_ID, CUST.CUST_NBR, CUST.CUST_NM,
           CUST.CUST_LEGAL_NM, CUST.STORE_ADDR_1,    CUST.STORE_ADDR_2,
           CUST.CROSS_STREET,
           XMLELEMENT(
               'Alerts', XMLELEMENT( 'Alert_alert_id', alert_id ),
               XMLELEMENT( 'Alert_agent_id', agent_id ),
               XMLELEMENT( 'Alert_alert_type_id', alert_type_desc),
               XMLELEMENT( 'Alert_alert_date', alert_date),
               XMLELEMENT(
                   'Alert_url_reference', url_reference
                ), XMLELEMENT( 'Alert_read_status', read_status )
           ) CUST.STORE_CITY, CUST.STORE_ST, CUST.POST_CODE,
           CUST.STORE_MGR_NM
      FROM MESSAGES m
      JOIN PRIORITY_CD P
     WHERE m.to_person_id = ?
       AND p.NAME = 'PRI_EMERGENCY'
       AND p.JOB = 'Plumber'
       AND m.status_id < (
            SELECT s.STATUS_ID
              FROM MSG_STATUS_CD s
             WHERE s.NAME = 'MSG_READ'
           )
     ORDER BY m.msg_id desc


看起来要舒服多了。
阅读(3676) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~