ITPub博客

首页 > 数据库 > Oracle > [20211224]vim插件格式化sql语句.txt

[20211224]vim插件格式化sql语句.txt

原创 Oracle 作者:lfree 时间:2021-12-27 17:14:46 0 删除 编辑

[20211224]vim插件格式化sql语句.txt

--//最近一段时间做优化sql语句工作,发现开发写的sql超级变态,很长的sql语句不带换行的,导致我抽取要调试的sql语句在sqlplus下无
--//法执行.报如下错误:
SCOTT@book> @ b1.txt
Input truncated to 7499 characters
SP2-0027: Input is too long (> 2499 characters) - line ignored
SP2-0734: unknown command beginning "sdasd asda..." - rest of line ignored.

--//需要一个格式化sql语句的工具.vim下有一个插件支持格式化sql语句,我以前仅仅在windows下使用,从来没有在linux下的vim使用,安
--//装并做一个记录.

--//安装步骤:
1.ALign 插件:
http://www.vim.org/scripts/script.php?script_id=294
--//https://www.vim.org/scripts/download_script.php?src_id=19633

安装很简单:
vim Align.vba.gz
:so %
:q

--//注意要删除旧的AlignMaps.vim文件,不要map会冲突!新的改名为AlignMapsPlugin.vim。
--//在linux下安装出现一个奇怪问题,里面解压的文件变成。
# ls -l Align*
-rw-r--r-- 1 root root 21574 2021-12-27 09:14:07 AlignMapsPlugin.vim
-rw-r--r-- 1 root root  1957 2021-12-27 09:14:07 AlignPlugin.vim?[[[1

--//改名删除后面的怪字符。
--//根据喜好设置如下:
let g:sqlutil_keyword_case = '\U'
let g:sqlutil_align_comma = 1

--//我发现这个在linux下sqlutil_align_comma = 1不起作用,也许版本升级造成的问题。

2.SQLUtilities 插件
--//SQL utilities - Formatting, generate - columns lists, procedures for databases
http://vim.sourceforge.net/scripts/script.php?script_id=492
--//https://vim.sourceforge.io/scripts/download_script.php?src_id=19113

install details
Put <SQLUtilities.vim> into your .vim/plugin or vimfiles/plugin directory.
Put <SQLUtilities.vim> into your .vim/autoload or vimfiles/autoload directory.
Put <SQLUtilities.txt> into your .vim/doc or vimfiles/doc directory, run :helptags $VIM/vimfiles/doc.

3.另外谈谈sql语句格式化问题.

--//我不知道PB里面的sql语句如何写。在toad里面有一个方法可以把编码转换成对应程序代码的格式,以delphi为例说明:
toad options-> Editor -> Code Assist -> Make Code,选择delphi,保存,实际上可以自己编辑模板。

{ Delphi Language Template }

%SqlVar% := '%SqlText% ' +
       '%SqlTextNext% ' +
;

--//Quote Character 定义为',Escape Character 定义为'.
--//在编辑器里面copy and paste语句:
SELECT deptno,dname,loc,emp.deptno,sal,job
  FROM detp,emp
 WHERE dept.deptno = emp.deptno;

--//按ctrl+m ,也许就从菜单选择editor->Make code statement.这样delphi statement 拷贝到模板。在ctrl+v paste出就ok了。

SQL := 'SELECT deptno,dname,loc,emp.deptno,sal,job ' +
       '  FROM detp,emp ' +
       ' WHERE dept.deptno = emp.deptno; ' ;

--//按ctrl+p , 反向操作editor->strip code statement.就变成
SELECT deptno,dname,loc,emp.deptno,sal,job
  FROM detp,emp
 WHERE dept.deptno = emp.deptno;

--//PB我不熟悉,我上网看了一下动态语句使用如下,很容易自己写一个模板。

 如 : String mysql = " CREATE TABLE Employee" &
                      + "( employee_id integer not null, " &
                      ……
                      + "emp_lname char(20) not null ) "

EXECUTE IMMEDIATE mysql ; // 执行 DDL 创建了 table

--//很容易写出要求的模板:
%SqlVar% = "%SqlText% " &
       + "%SqlTextNext% "  &

--//sql语句格式化在toad下:
SELECT deptno
      ,dname
      ,loc
      ,emp.deptno
      ,sal
      ,job
  FROM detp, emp
 WHERE dept.deptno = emp.deptno;

--//ctrl+M,ctrl+v如下:
SQL = "SELECT deptno " &
       + "      ,dname "  &
       + "      ,loc "  &
       + "      ,emp.deptno "  &
       + "      ,sal "  &
       + "      ,job "  &
       + "  FROM detp, emp "  &
       + " WHERE dept.deptno = emp.deptno; "  &

--//删除分号以及尾部的&就ok了。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2849570/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969295