【发布时间】:2018-04-28 15:53:16
【问题描述】:
我希望将一个参数从我的 UNIX 脚本传递到一个 SQL 文件中。不幸的是,它遇到了问题。
请参阅下面的 UNIX 脚本:
#!/bin/ksh
############
# Functions
_usage() {
SCRIPT_NAME=XXX
-eq 1 -o "$1" = "" -o "$1" = help -o "$1" = Help -o "$1" = HELP ]; then
echo "Usage: $SCRIPT_NAME [ cCode ]"
echo " - For example : $SCRIPT_NAME GH\n"
exit 1
fi
}
_initialise() {
cCode=$1
echo $cCode
}
# Set Variables
_usage $@
_initialise $1
# Main Processing
sql $DBNAME < test.sql $cCode > $PVNUM_LOGFILE
RETCODE=$?
# Check for errors within log file
if [[ $RETCODE != 0 ]] || grep 'E_' $PVNUM_LOGFILE
then
echo "Error - 50 - running test.sql. Please see $PVNUM_LOGFILE"
exit 50
fi
请查看 SQL 脚本(test.sql):
SELECT DISTINCT v1.*
FROM data_latest v1
JOIN temp_table t
ON v1.number = t.id
WHERE v1.code = '&1'
运行我的 UNIX 脚本时收到的错误是:
INGRES TERMINAL MONITOR Copyright 2008 Ingres Corporation
E_US0022 Either the flag format or one of the flags is incorrect,
or the parameters are not in proper order.
有人知道我做错了什么吗?
谢谢!
【问题讨论】:
-
@mathB 在 sql 行中使用了重定向符号 (" $PVNUM_LOGFILE”。不知道是不是这个问题?
-
我不熟悉错误,您是否以正确的格式传递参数?也试试这个:在您的 SQL 文件
test.sql中,将'&1'更改为'VaLuE'并在执行 sql 之前,插入此命令:sed 's/VaLuE/$cCode/' /full/path/to/test.sql并在您的主进程中,删除$cCode并发送 SQL 文件直。
标签: sql sql-server unix parameters parameter-passing