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?

Was it helpful?

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/

Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange
scroll top