line
stmt
bran
cond
sub
pod
time
code
1
package SQL::Shell::Manual;
2
3
1
1
7472
use vars qw($VERSION);
1
17
1
195
4
$VERSION = sprintf"%d.%03d", q$Revision: 1.6 $ =~ /: (\d+)\.(\d+)/;
5
6
1;
7
8
=head1 NAME
9
10
SQL::Shell::Manual - user guide for sql shell
11
12
=head1 SYNOPSIS
13
14
sqlsh -d DBI:Oracle:IFLDEV -u scott -p tiger
15
16
=head1 DESCRIPTION
17
18
This is a guide to using sqlsh. sqlsh is an interactive shell run from the command-line for workling with databases.
19
It can also be run in "batch mode" taking a list of commands from stdin (using the -i switch) or you can pass a single command to it on the command-line.
20
21
=head2 Connecting
22
23
Either set a DSN in the environment as DBI_DSN, supply with the -d option or use the connect command:
24
25
unixbox% sqlsh
26
unixbox% sqlsh -d DBI:Oracle:IFLDEV -u scott -p tiger
27
28
You can also connect from inside sqlsh:
29
30
unixbox% sqlsh
31
> connect DBI:Oracle:IFLDEV scott tiger
32
DBI:Oracle:IFLDEV> show $dbh Name
33
+--------+
34
| Name |
35
+--------+
36
| IFLDEV |
37
+--------+
38
39
and disconnect:
40
41
DBI:Oracle:IFLDEV> disconnect
42
> show $dbh Name
43
Not connected to database.
44
45
If you don't supply a password, sqlsh will prompt you:
46
47
unixbox% sqlsh -d DBI:Oracle:IFLDEV -u scott
48
Enter password for scott:
49
50
You can specify a blank password by passing -p:
51
52
unixbox% sqlsh -d DBI:Oracle:IFLDEV -u guest -p
53
54
From within sqlsh you can get a list of DBI drivers:
55
56
unixbox% sqlsh
57
> show drivers
58
59
CSV
60
DBM
61
ExampleP
62
Excel
63
File
64
Multiplex
65
Oracle
66
Proxy
67
SQLite
68
Sponge
69
mysql
70
71
and a list of possible data sources for a driver:
72
73
unixbox% sqlsh
74
> show datasources Oracle
75
76
dbi:Oracle:GISCPS
77
dbi:Oracle:IFL1
78
dbi:Oracle:IFLDEV
79
dbi:Oracle:IFLTEST
80
81
Common DBI DSNs include:
82
83
DBI:Oracle:
84
DBI:mysql:
85
DBI:ADO:
86
DBI:Excel:file=
87
DBI:CSV:f_dir=
88
DBI:SQLite:dbname=
89
90
=head2 Exploring the schema
91
92
=head3 show tables
93
94
This lists the tables in your database along with other attributes that may
95
be provided by your platform and driver:
96
97
DBI:SQLite:dbname=test.db> show tables
98
+-----------+-------------+--------------------+--------------+---------+
99
| TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS |
100
+-----------+-------------+--------------------+--------------+---------+
101
| NULL | main | sqlite_master | SYSTEM TABLE | NULL |
102
| NULL | temp | sqlite_temp_master | SYSTEM TABLE | NULL |
103
| NULL | main | commands | TABLE | NULL |
104
+-----------+-------------+--------------------+--------------+---------+
105
106
For some database drivers this may include some system tables.
107
108
=head3 show tablecounts
109
110
This lists the tables with a rowcount for each:
111
112
DBI:SQLite:dbname=test.db> show tablecounts
113
+-----------------------------+------+
114
| table | rows |
115
+-----------------------------+------+
116
| "main"."sqlite_master" | 2 |
117
| "temp"."sqlite_temp_master" | 0 |
118
| "main"."commands" | 12 |
119
+-----------------------------+------+
120
121
For some database drivers this may include some system tables. This
122
command does a C on every table in your database. You
123
may not want to do this on databases with large numbers of tables, and/or
124
tables with large numbers of rows.
125
126
=head3 show catalogs
127
128
If your platform supports it, this shows a listing of available database
129
catalogs.
130
131
DBI:ODBC:localdb> show catalogs
132
+----------------+
133
| TABLE_CAT |
134
+----------------+
135
| AdventureWorks |
136
| master |
137
| msdb |
138
| tempdb |
139
+----------------+
140
141
=head3 show schemas
142
143
This command will list the schemas available in your database. Note that
144
this is different from C (singular), which shows table
145
descriptions for every table in your schema (see below).
146
147
DBI:SQLite:dbname=test.db> show schemas
148
+-------------+
149
| TABLE_SCHEM |
150
+-------------+
151
| main |
152
| temp |
153
+-------------+
154
155
=head3 show tabletypes
156
157
List the available table-types in your database.
158
159
DBI:SQLite:dbname=test.db> show tabletypes
160
+-----------------+
161
| TABLE_TYPE |
162
+-----------------+
163
| LOCAL TEMPORARY |
164
| SYSTEM TABLE |
165
| TABLE |
166
| VIEW |
167
+-----------------+
168
169
=head3 desc
170
171
Lists the columns in a table:
172
173
DBI:Oracle:IFLDEV> desc commands
174
+-------------+----------------+------+
175
| Field | Type | Null |
176
+-------------+----------------+------+
177
| COMMAND | VARCHAR2(200) | YES |
178
| DESCRIPTION | VARCHAR2(1020) | YES |
179
+-------------+----------------+------+
180
181
=head3 show schema
182
183
Lists the columns in a table, for each table in the schema:
184
185
DBI:Oracle:IFLDEV> show schema
186
187
schema dump
188
COMMANDS:
189
+-------------+----------------+------+
190
| Field | Type | Null |
191
+-------------+----------------+------+
192
| COMMAND | VARCHAR2(200) | YES |
193
| DESCRIPTION | VARCHAR2(1020) | YES |
194
+-------------+----------------+------+
195
196
=head2 Current shell settings (show settings)
197
198
To list some C internal settings:
199
200
DBI:SQLite:dbname=test.db> show settings
201
+------------------+-------+
202
| PARAMETER | VALUE |
203
+------------------+-------+
204
| auto-commit | on |
205
| delimiter | \t |
206
| enter-whitespace | |
207
| escape | off |
208
| longreadlen | 512 |
209
| longtruncok | on |
210
| multiline | off |
211
| verbose | on |
212
| width | 80 |
213
+------------------+-------+
214
215
Note that not all settings are yet included in this output.
216
217
=head2 Querying the database
218
219
DBI:SQLite:dbname=test.db> select * from commands
220
+------------------+--------------------------------------------------------------+
221
| command | desc |
222
+------------------+--------------------------------------------------------------+
223
| show drivers | Displays a list of DBI drivers |
224
| show datasources | Displays a list of available data sources for a driver |
225
| connect | Connects to a data source |
226
| disconnect | Disconnects from a data source |
227
| show tables | List the tables in the schema |
228
| show tablecounts | List the tables in the schema with a rowcount for each table |
229
| show schema | Lists the columns in each table in the schema |
230
| desc | List the columns in a table |
231
| set | Set a parameter |
232
| help | Displays sqlsh help in your $PAGER |
233
| reload | Reloads sqlsh |
234
| exit | Quits sqlsh |
235
+------------------+--------------------------------------------------------------+
236
237
=head3 BLOB values
238
239
You can control the amount of BLOB data fetched by setting the C parameter.
240
241
242
DBI:Oracle:IFLDEV> set longreadlen 4096
243
LongReadLen set to '4096'
244
245
DBI:Oracle:IFLDEV> show $dbh LongReadLen
246
+-------------+
247
| LongReadLen |
248
+-------------+
249
| 4096 |
250
+-------------+
251
252
Note that the C parameter should also be set (it is by default):
253
254
DBI:Oracle:IFLDEV> show $dbh LongTruncOk
255
+-------------+
256
| LongTruncOk |
257
+-------------+
258
| 1 |
259
+-------------+
260
261
262
=head3 Values containing non-word characters
263
264
Suppose we have values in our database which contain whitespace characters (e.g. tabs):
265
266
DBI:Oracle:IFLDEV> set enter-whitespace on
267
Whitespace may be entered as \n, \r and \t
268
269
DBI:Oracle:IFLDEV> insert into commands(command,description) values('test', 'one\ttwo')
270
INSERT commands: 1 rows affected
271
272
When we query the table we see these as literal values:
273
274
DBI:Oracle:IFLDEV> select * from commands
275
+---------+-------------+
276
| COMMAND | DESCRIPTION |
277
+---------+-------------+
278
| test | one two |
279
+---------+-------------+
280
281
We can instead chose to display them escaped:
282
283
DBI:Oracle:IFLDEV> set escape show-whitespace
284
DBI:Oracle:IFLDEV> select * from commands
285
+---------+-------------+
286
| COMMAND | DESCRIPTION |
287
+---------+-------------+
288
| test | one\ttwo |
289
+---------+-------------+
290
291
Alternatively we can use uri-escaping:
292
293
DBI:Oracle:IFLDEV> set escape uri-escape on
294
DBI:Oracle:IFLDEV> select * from commands
295
+---------+-------------+
296
| COMMAND | DESCRIPTION |
297
+---------+-------------+
298
| test | one%09two |
299
+---------+-------------+
300
301
=head3 Entering multi-line statements
302
303
To enable multiline mode:
304
305
DBI:Oracle:IFLDEV> set multiline on
306
307
You can then build up statements over multiple lines, ending with a semicolon, e.g.:
308
309
DBI:Oracle:IFLDEV> select
310
DBI:Oracle:IFLDEV> count(*)
311
DBI:Oracle:IFLDEV> from
312
DBI:Oracle:IFLDEV> commands
313
DBI:Oracle:IFLDEV> ;
314
+----------+
315
| COUNT(*) |
316
+----------+
317
| 12 |
318
+----------+
319
320
To disable multiline mode, remember you need to end the statement in a semicolon:
321
322
DBI:Oracle:IFLDEV> set multiline off;
323
324
=head3 Altering the display mode
325
326
The default (C) display mode is similar to that used by the mysql client - it works well for tables of fairly short values.
327
The C display mode is good for viewing single records:
328
329
DBI:SQLite:dbname=test.db> set display-mode record
330
DBI:SQLite:dbname=test.db> select * from commands where command='desc'
331
--------------------------------------------------------------------------------
332
command | desc
333
desc | List the columns in a table
334
--------------------------------------------------------------------------------
335
336
The C display mode (despite sounding like a description of sqlsh's author) provides a minimum clutter view of the data.
337
The C display mode generally looks horrendous but is useful for a quick cut+paste of delimited values.
338
The C display mode generates insert statements using a $table placeholder for where the data is to be inserted.
339
The C display mode generates element-only XML which can be parsed into a list of hashes with XML::Simple.
340
341
=head2 Altering the database
342
343
By default transactions are not automatically committed so you must explicitly commit them:
344
345
DBI:Oracle:IFLDEV> insert into commands(command, description) values ('dump','Writes a table or query results to a delimited file')
346
INSERT commands: 1 rows affected
347
348
DBI:Oracle:IFLDEV> commit
349
350
and you can roll back mistakes:
351
352
DBI:Oracle:IFLDEV> delete from commands
353
DELETE commands: 11 rows affected
354
355
DBI:Oracle:IFLDEV> rollback
356
DBI:Oracle:IFLDEV> select count(*) from commands
357
+----------+
358
| COUNT(*) |
359
+----------+
360
| 12 |
361
+----------+
362
363
If you prefer, you can switch autocommit on:
364
365
set autocommit on
366
insert ...
367
update ...
368
369
This is the preferred mode of operation when connecting to some database
370
platforms like SQL Server. Depending on the platform, not all commands work
371
within a "transaction", and some platforms prefer that they be run with
372
autocommit on. Your mileage may vary.
373
374
=head3 Clearing the database
375
376
The C command can be used to remove all the data each of the tables in the database:
377
378
DBI:Oracle:IFLDEV> wipe tables
379
Wipe all data from:
380
381
COMMANDS
382
383
Are you sure you want to do this? (type 'yes' if you are) yes
384
385
Wiped all data in database
386
387
It prompts you to confirm before anihilating your database.
388
389
=head2 The send and recv commands
390
391
These commands were added in v1.16. Their purpose is to give the user more
392
control over how commands are interpreted by the shell before they are sent
393
to the DB without the need to make the shell identify the commands to determine
394
whether to expect output or not. They are intended to deal with
395
platform-specific variations of SQL syntax that aren't covered by the generic
396
command-matching process in C.
397
398
C is used when you don't expect output from the command, and C is
399
used for cases where the command provides output, and you'd like it
400
rendered and displayed, as if it had come from a C.
401
402
=head3 Example 1
403
404
On IBM Netezza, you can query previously deleted records by giving the
405
database the following command:
406
407
set show_deleted_records=TRUE
408
409
If you try to do that from C, it will tell you that the command is
410
not recognized, because C has a built-in C command, and it is
411
trying to match it to what you have typed at the prompt.
412
413
The solution is to use the C command to submit the C expression to
414
the DB without having it intercepted by C:
415
416
send set show_deleted_records=TRUE
417
418
=head3 Example 2
419
420
On SQL Server there are a number of procedure calls that provide output. For
421
instance:
422
423
exec xp_cmdshell 'dir *.exe'
424
425
or simply
426
427
xp_cmdshell 'dir *.exe'
428
429
While C supports the C command, this is intended to run
430
commands from a local SQL file. In this case, C would just reply
431
that the command is not recognized. The solution is to use the C
432
command:
433
434
recv exec xp_cmdshell 'dir *.exe'
435
436
or
437
recv xp_cmdshell 'dir *.exe'
438
439
This will make C submit the exec expression to the DB as if it were
440
a C command, so that any output is rendered and displayed.
441
442
=head3 Example 3
443
444
Several database platforms allow giving the C command to query a
445
different database. You are in effect switching databases without
446
disconnecting. The command looks as follows:
447
448
use MY_DB_NAME
449
450
If I give this command while in C, it will not be recognized,
451
however, I could pass it on to the DB by using C:
452
453
send use MY_DB_NAME
454
455
In this case we type C instead or C because we don't expect any
456
output from the C command.
457
458
Note that if your DB platform supports the C command, you may also need
459
a command to tell you which database you're currently using. This is
460
platform-dependent, but I will provide an example from SQL Server:
461
462
select dbname() as current_database
463
464
=head2 Dumping delimited data
465
466
C can either be used to dump an entire table:
467
468
dump mytable into export.txt
469
470
or the rowset resulting from a query:
471
472
dump select type, count(*) from mytable group by type into histogram.txt delimited by :
473
474
An example:
475
476
DBI:SQLite:dbname=test.db> dump commands into commands.csv delimited by ,
477
Dumping commands into commands.csv
478
Dumped 12 rows into commands.csv
479
480
DBI:SQLite:dbname=test.db> more commands.csv
481
command,desc
482
show drivers,Displays a list of DBI drivers
483
show datasources,Displays a list of available data sources for a driver
484
connect,Connects to a data source
485
disconnect,Disconnects from a data source
486
show tables,List the tables in the schema with a rowcount for each table
487
show schema,Lists the columns in each table in the schema
488
desc,List the columns in a table
489
set,Set a parameter
490
help,Displays sqlsh help in your $PAGER
491
reload,Reloads sqlsh
492
exit,Quits sqlsh
493
494
You can also dump all the tables in a database into a directory:
495
496
dump all tables into dumpdir/
497
498
=head2 Logging
499
500
You can chose to log commands:
501
502
log commands logfile.txt
503
504
or query results:
505
506
log queries dumpfile.txt
507
508
or both:
509
510
log all history.log
511
512
=head2 Exporting data as XML
513
514
DBI:Oracle:IFLDEV> set log-mode xml
515
516
DBI:Oracle:IFLDEV> log queries export.xml
517
Logging queries to export.xml
518
519
DBI:Oracle:IFLDEV>> select * from commands where command like 'show%'
520
+------------------+--------------------------------------------------------------+
521
| COMMAND | DESCRIPTION |
522
+------------------+--------------------------------------------------------------+
523
| show drivers | Displays a list of DBI drivers |
524
| show datasources | Displays a list of available data sources for a driver |
525
| show tables | List the tables in the schema |
526
| show tablecounts | List the tables in the schema with a rowcount for each table |
527
| show schema | Lists the columns in each table in the schema |
528
+------------------+--------------------------------------------------------------+
529
530
DBI:Oracle:IFLDEV>> more export.xml
531
532
533
show drivers
534
Displays a list of DBI drivers
535
536
537
show datasources
538
Displays a list of available data sources for a driver
539
540
541
show tables
542
List the tables in the schema
543
544
545
show tablecounts
546
List the tables in the schema with a rowcount for each table
547
548
549
show schema
550
Lists the columns in each table in the schema
551
552
553
554
DBI:Oracle:IFLDEV>> no log
555
Stopped logging queries
556
557
=head2 Exporting data as SQL
558
559
DBI:Oracle:IFLDEV> set log-mode sql
560
561
DBI:Oracle:IFLDEV> log queries export.sql
562
Logging queries to export.sql
563
564
DBI:Oracle:IFLDEV>> select * from commands where command like 'show%'
565
+------------------+--------------------------------------------------------------+
566
| COMMAND | DESCRIPTION |
567
+------------------+--------------------------------------------------------------+
568
| show drivers | Displays a list of DBI drivers |
569
| show datasources | Displays a list of available data sources for a driver |
570
| show tables | List the tables in the schema |
571
| show tablecounts | List the tables in the schema with a rowcount for each table |
572
| show schema | Lists the columns in each table in the schema |
573
+------------------+--------------------------------------------------------------+
574
575
DBI:Oracle:IFLDEV>> more export.sql
576
INSERT into $table (COMMAND,DESCRIPTION) VALUES ('show drivers','Displays a list of DBI drivers');
577
INSERT into $table (COMMAND,DESCRIPTION) VALUES ('show datasources','Displays a list of available data sources for a driver');
578
INSERT into $table (COMMAND,DESCRIPTION) VALUES ('show tables','List the tables in the schema');
579
INSERT into $table (COMMAND,DESCRIPTION) VALUES ('show tablecounts','List the tables in the schema with a rowcount for each table');
580
INSERT into $table (COMMAND,DESCRIPTION) VALUES ('show schema','Lists the columns in each table in the schema');
581
582
DBI:Oracle:IFLDEV>> no log
583
Stopped logging queries
584
585
You can then replace $table with the table name you want the INSERT stataments to be issued against:
586
587
unixbox% perl -p -i -e 's/\$table/show_commands/' export.sql
588
589
=head2 Loading data
590
591
Loading a tab-delimited text file is simple:
592
593
load export.txt into mytable
594
595
Here's an example:
596
597
DBI:SQLite:dbname=test.db> create table commands(command varchar(50), desc varchar(255))
598
CREATE table commands: 0 rows affected
599
600
DBI:SQLite:dbname=test.db> load commands.tsv into commands
601
Loaded 12 rows into commands from commands.tsv
602
603
As with C you can change the delimiter character:
604
605
load export.csv into mytable delimited by ,
606
607
You can also specify character set translations:
608
609
load export.txt into mytable from CP1252 to UTF-8
610
611
if your database engine cannot do the character set conversions itself.
612
See L for a list of character set names.
613
614
=head2 Manipulating the command history
615
616
You can dump out the history to a file:
617
618
save history to history.txt
619
620
You can also load in a set of commands into the history:
621
622
load history from handy_queries.sql
623
624
This can be useful in conjunction with C.
625
You can clear the history at any time with:
626
627
clear history
628
629
and display it with:
630
631
show history
632
633
=head2 Running batches of commands
634
635
You can execute a sequence of sqlsh commands from a file:
636
637
> execute commands.sqlsh
638
639
that might have been generated by C or C.
640
You can also pipe commands into sqlsh on STDIN if you call it with the C<-i> switch:
641
642
unixbox% sqlsh -d DBI:Oracle:IFLDEV -u scott -p tiger -i < commands.sqlsh
643
644
=head1 VERSION
645
646
v1.17
647
648
=head1 AUTHOR
649
650
John Alden
651
Miguel Gualdron
652
653
=cut
654