blob: e61610863f6854aff5057ad21e275a75a45bb979 [file] [log] [blame]
/*
$Id: pl.sql 3353 2009-12-15 19:52:13Z unsaved $
SQL File to illustrate the use of SqlTool PL features.
Invoke like
java -jar .../hsqldb.jar .../pl.sql mem
-- blaine
*/
* if (! *MYTABLE)
\p MYTABLE variable not set!
/* You could use \q to Quit SqlTool, but it's often better to just
break out of the current SQL file.
If people invoke your script from SqlTool interactively (with
\i yourscriptname.sql) any \q will kill their SqlTool session. */
\p Use arguments "--setvar=MYTABLE=mytablename" for SqlTool
* break
* end if
/* Turning on Continue-upon-errors so that we can check for errors ourselves.*/
\c true
\p
\p Loading up a table named '*{MYTABLE}'...
/* This sets the PL variable 'retval' to the return status of the following
SQL command */
* retval ~
CREATE TABLE *{MYTABLE} (
i int,
s varchar(20);
);
\p CREATE status is *{retval}
\p
/* Validate our return status. In logical expressions, unset variables like
*unsetvar are equivalent to empty string, which is not equal to 0
(though both do evaluate to false on their own, i.e. (*retval) is false
and (0) is false */
* if (*retval != 0)
\p Our CREATE TABLE command failed.
* break
* end if
/* Default Continue-on-error behavior is what you usually want */
\c false
\p
/* Insert data with a foreach loop.
These values could be from a read of another table or from variables
set on the command line like
*/
\p Inserting some data int our new table (you should see 3 row update messages)
* foreach VALUE (12 22 24 15)
* if (*VALUE > 23)
\p Skipping *{VALUE} because it is greater than 23
* continue
\p YOU WILL NEVER SEE THIS LINE, because we just 'continued'.
* end if
INSERT INTO *{MYTABLE} VALUES (*{VALUE}, 'String of *{VALUE}');
* end foreach
\p
* themax ~
/* Can put Special Commands and comments between "* VARNAME ~" and the target
SQL statement. */
\p We're saving the max value for later. You'll still see query output here:
SELECT MAX(i) FROM *{MYTABLE};
/* This is usually unnecessary because if the SELECT failed, retval would
be undefined and the following print statement would make SqlTool exit with
a failure status */
* if (! *themax)
\p Failed to get the max value.
/* It's possible that the query succeeded but themax is "0".
You can check for that if you need to. */
* break
\p YOU WILL NEVER SEE THIS LINE, because we just 'broke'.
* end if
\p
\p ##############################################################
\p The results of our work:
SELECT * FROM *{MYTABLE};
\p MAX value is *{themax}
\p
\p Everything worked.