How can I pass parameters to an “SQL Script” from isql
Question
I am wondering if it is possible to pass parameters to an SQL script from within sybase's isql utility.
For example, I'd like to store a select statement in the file the_script.sql
that would look something like
select
col_1,
col_2,
etc
from
table
where
cond1 > $param1 and
cond2 < $param2
Then, with that file, I'd like to "execute" it from isql with
:r the_script.sql 900 20
with the expectation that $param1
is repleaced with 900 and $param2
with 20.
Is there a possibility to achieve what I want?
Solution
Looking at your use case, it looks as if you want a stored procedure, so here's one I wrote for you:
CREATE PROC the_script
(
@param1 int = null,
@param2 int = null
)
AS
BEGIN
select
col_1,
col_2,
etc
from
table
where
cond1 > @param1 and
cond2 < @param2
END
Now, being in isql, you can run it:
exec the_script 900, 20
Regards.
OTHER TIPS
I don't think it can be done positionally from within isql. Using a shell script wrapper, you could do something like
#!/bin/bash
PARAM1=$1
PARAM2=$2
isql -u whoever -p whatever -s myserver << EOF
select * from mytable where mycolumn > ${PARAM1} and mycolumn < ${PARAM2}
go
EOF
The only tool I know of to allow you to do that is SQSH. It provides a language that is a blend of shell script and SQL. So you can get your (sqsh) shell script to read parameters from the command line or a file etc. and pass them in to sql batches written in-line with the shell script. http://www.sqsh.org/