Use this page to discuss script 356 dbext: database access from Vim

  • Add constructive comments, bug reports, or discuss improvements (see the guideline).
  • Do not document the script here (the author should do that on
  • This page may be out of date: check the script's page above, and its release notes.


MS/Windows/GVIM ODBC support

For ODBC or DBI, support for perl interfaces is required. By default, MSWIN/gvim doesnt support this. You must download/install the proper version of perl to enable it. Start with the :version command and search for the -DDYNAMIC_PERL_DLL option which will tell you specifically which version of perl you need to have installed (e.g.:perl514.dll means perl version 5.14 is needed)

StrawberryPerl and activeperl dont seem to work, however DWIMPerl for windows does. By installing DWIMPerl and ensuring PATH env variable points to the directory containing perl514.dll (in my case c:\dwimperl\perl\bin) the command :echo has('perl') now works properly.


From the Perl documentation for the DBI prepare method (

Some command-line SQL tools use statement terminators, like a semicolon, to indicate the end of a statement. Such terminators should not normally be used with the DBI.

Including the command terminator (by default a semicolon) as part of the SQL is causing parse and execute errors for DBD::Oracle such that I'm not able to make use of DBI, which I would much prefer because of its speed and formatting of output. I'm not sure what the best fix is... as you would want semicolons if sending a pl/sql block (anonymous block or some kind of CREATE). Oracle SQL*Plus uses a slash ("/") to terminate pl/sql blocks, but allows semicolons as statement terminators for SQL statements. --Jwss (talk) 17:16, April 4, 2016 (UTC)

Thanks for this great plugin, use it almost everyday. Have one request, would be great if variable can be use instead of parameters prompting, i.e:

set opt1 = "somevalue"; opt2 = "somevalue2"
set opt1 = "othervalueset"; opt2 = "othervalueset2"

    SELECT * from imaginarytable
    WHERE field1 = :opt1 AND field2 = :opt2;

So one can select different value before executing above query. Thanks for great plugin. --JK October 27, 2011

Not sure which version of dbext you are using. By default, when executing the SELECT statement it will prompt you for :opt1 and :opt2. It will then also save these values (for this buffer) and the next time you execute the a query using :opt1 or :opt2, it will ask if you want to use your saved values. You can see the saved values (and delete them) using <Leader>slr (SQL - List - vaRiables). That feature was added in version 11.1, the current version is 14.0 Dfishburn 11:45, April 5, 2012 (UTC)


Version 23

  • In the function dbext#DB_commit there is a bug around line 9228.
    perl db_commit(bufnr)

should be

    exec "perl db_commit(". bufnr . ")"
"bufnr" was being passed to Perl as a literal string "bufnr" instead of the buffer number.
  • I also found some naked db_debug() calls (the calling procedure wasn't part of the string passed to db_debug()) that made debugging a little more difficult. I'll try to diff my changes and post line numbers later -- or better yet figure out how to work with github and make a pull request.

--Jwss (talk) 14:42, April 4, 2016 (UTC)

  • Version 20 does not prompt for connection profile
I have two Mysql connection profile in my .vimrc file, works fine with v19. After upgrading to v20. dbext does not prompt for connection profile, I have to issue "\sbp" to select connection first otherwise it will display error "dbext:A valid database type must be chosen"
  • Syntax highlight got removed after some actions sequence if dbext plugin installed.
  • Steps to reproduce: open some file to edit. Enter :cope<CR><C-w>k<C-w>o

--January 25, 2012

I can't reproduce this. If you can using the current version 14.0 please email me, as it will involve some back and forths. Dfishburn 11:45, April 5, 2012 (UTC)
  • Using DBext from VIM on Microsoft Windows XP with Oracle Instant Client 11.2adds a single quote when it should add a double-quote. The command arguments sent to SQLPLUS do not get properly expanded and the command fails. Changing the code from
    # Single quote causing problem
    #          |
    #          *
    sqlplus -S 'my_user/my_password@oracle_server" @c:\temp/dbext.sql


    # Substituting double quote solves problem
    #          |
    #          *
    sqlplus -S "my_user/my_password@oracle_server" @c:\temp/dbext.sql

fixes the problem. Of course, this makes DBext useless unless there is a fix for this behavior. Elcidia 17:37, June 12, 2012 (UTC)

A fix (version 16.0) for this was posted last night, please upgrade to the most current release of dbext. Dfishburn 21:58, June 12, 2012 (UTC)
  • Update: Still not working for Windows command interpreter

I installed version 16.0 and I see that two single quotes are now issued to the command line. Unfortunately, on Windows, these should be double quotes and not single quotes. This is a limitation of the Windows as the command interpreter does not process single quotes (been that way since Windows 3.1 I think).

   #   What it should look like
   #     double quote                      double quote
   #          |                                 |
   #          +                                 +
   sqlplus -S "my_user/my_password@oracle_server" @c:\temp/dbext.sql

As another idea, it would be cool if Powershell could be invoked. Elcidia 13:30, June 13, 2012 (UTC)

  • Update: Version 17.0 is also not working with the Windows command interpreter for the reasons mentioned by @Elcidia.


    let cmd = dbext_bin .
                \ ' ' . dbext#db_getwtype("cmd_options") .
                \ s:db_option(" '", s:db_get("user"), '') .
                \ s:db_option('/', s:db_get("passwd"), '') .
                \ s:db_option('@', s:db_get("srvname"), '') .
                \ s:db_option(' ', dbext#db_getwtypedefault("extra"), '') .
                \ "' @" . s:dbext_tempfile


    let cmd = dbext_bin .
                \ ' ' . dbext#db_getwtype("cmd_options") .
                \ s:db_option(" \"", s:db_get("user"), '') .
                \ s:db_option('/', s:db_get("passwd"), '') .
                \ s:db_option('@', s:db_get("srvname"), '') .
                \ s:db_option(' ', dbext#db_getwtypedefault("extra"), '') .
                \ "\" @" . s:dbext_tempfile

in autoload/dbext.vim (ORA exec section) fixed the problem for me. --October 19, 2012

This change is definitely in version is 21.0 Dfishburn 10:00, October 29, 2013 (UTC)

  • Update: Version 20.0 still has syntax highlighting removed in certain cases as the previous poster pointed out. This is reproducible following the same steps earlier listed. Enter :cope<CR><C-w>k<C-w>o --July 30, 2014

How to edit stored functions in Postgres?

Thanks for this great plugin! I'm trying to figure out how to define a pl/pgsql function, it doesn't appear that dbext will allow SQL commands having more than one semicolon, for example:

CREATE OR REPLACE FUNCTION example_function() returns integer as $$
    return 42;
$$ language plpgsql;

When I run \sel it appears to only send the portion up to the first semi-colon, is there a way to send the entire visually selected area? -- Ed September 18, 2015

Problems deleting unsaved buffer

In dbext v12 and later versions, deleting an unsaved buffer does not work if other buffers are open. Assume a .vimrc with only set nocompatible in it and dbext installed, nothing else. I am using vim 7.4.415:

  • Start vim
  • In the empty buffer window, type something in order to modify it. (Do not save.)
  • Open a second buffer with some existing file, e.g., :sp ~/.vimrc
  • Switch back to the first buffer: CTRL-w w. At this point, :ls shows
  1 %a + "[No Name]"                    line 1
  2 #a   "~/.vimrc"                     line 0
  • Attempt to close the current buffer: :bd!

Result: Buffer 2 with .vimrc becomes hidden, and the first buffer remains unclosed. :ls shows:

  1 %h + "[No Name]"                    line 1
  2 #    "~/.vimrc"                     line 1

The ls output is rather strange, since ls indicates buffer 1 would be hidden, whereas in fact it is not.

Without dbext, or with dbext v11 installed, the first buffer is correctly deleted, and the buffer list is:

  2 %a   "~/.vimrc"                     line 1

If I change plugin/dbext.vim to use the old s:DB_checkModeline implementation, it works as expected (see patch at ). It seems weird, because this change from v11 to v12 looked more like a refactoring, but apparently it isn't. I would appreciate if someone can confirm the behavior and, ideally, include a fix in an upcoming dbext.vim version. Thanks!

Describing, Selecting from non-current database

I'm using Sybase ASE and would like a way to describe (for example) a table which is not in the current database, e.g. otherdb.dbo.mytable I've tried <leader>sdt both in visual and normal mode, but cannot get this to work. --February 3, 2015