Come posso passare parametri a un “Script SQL” da isql
Domanda
Mi chiedo se è possibile passare parametri a uno script SQL dall'interno di utilità isql di Sybase.
Per esempio, mi piacerebbe conservare una dichiarazione prescelta nel file the_script.sql
che sarebbe simile
select
col_1,
col_2,
etc
from
table
where
cond1 > $param1 and
cond2 < $param2
Poi, con quel file, mi piacerebbe "eseguire" da isql con
:r the_script.sql 900 20
con l'aspettativa che $param1
è repleaced con 900 e $param2
con il 20.
C'è la possibilità di ottenere ciò che voglio?
Soluzione
Guardando il tuo caso d'uso, sembra come se si desidera una stored procedure, quindi ecco quello che ho scritto per voi:
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
Adesso, essendo in isql, è possibile eseguirlo:
exec the_script 900, 20
Saluti.
Altri suggerimenti
Non credo che si può fare positionally dall'interno isql. Utilizzando un wrapper script di shell, si potrebbe fare qualcosa di simile
#!/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
L'unico strumento che conosco per consentire di fare che è sqsh. Esso fornisce un linguaggio che è una miscela di script di shell e SQL. Così si può ottenere lo script di shell (sqsh) per leggere i parametri da linea di comando o un file, ecc e passarli a lotti sql scritti in linea con lo script di shell. http://www.sqsh.org/