我写了下面的代码块
#!/bin/bash
TABLE_NAME="${1}"
COL_NAME="${2}"
FIELD_VALUES_1SQ_FUNC()
{
FIELD_VALUES_1SQS=`sqlplus -s sab/admin@TERM << EOF
SET FEEDBACK OFF;
SET HEADING OFF;
Select TESTING.FIELD_VALUES_TEMP_1SQ.NEXTVAL from dual;
exit;
EOF`
FIELD_VALUES_1SQ=`echo ${FIELD_VALUES_1SQS} | tr -d ' '`
}
RT_SEQ_CHECK_FUNC()
{
RT_SEQ_CHECKS=`sqlplus -s sab/admin@TERM << EOF
SET FEEDBACK OFF;
SET HEADING OFF;
Select * from TESTING.FIELD_VALUES where FIELD_ROW_ID='${1}' and TF_ID='${2}';
exit;
EOF`
RT_SEQ_CHECK=`echo ${RT_SEQ_CHECKS} | tr -d ' '`
}
RT_FIELD_IDS_FUNC()
{
RT_FIELD_IDS=`sqlplus -s sab/admin@TERM << EOF
SET HEADING OFF;
SET FEEDBACK OFF;
select max(TF_ID) from TESTING.TABLE_FIELD where field_id in(select field_id from TESTING.FIELD_DOMAIN where name='${2}') and table_id in (select table_id from TESTING.TABLE where name='${1}');
EXIT;
EOF`
RT_FIELD_ID=`echo ${RT_FIELD_IDS} | tr -d ' '`
}
FIELD_VALUES_1SQ_FUNC
RT_FIELD_IDS_FUNC ${TABLE_NAME} ${COL_NAME}
RT_SEQ_CHECK_FUNC ${FIELD_VALUES_1SQ} ${RT_FIELD_ID}
if [ -z "${RT_SEQ_CHECK}" ]
then
echo "Sequence values doesn't exist |--${RT_SEQ_CHECK}--|"
else
echo "SEQUNCE VAlue exists |--${RT_SEQ_CHECK}--|"
fi
echo "TF_ID=${FIELD_VALUES_1SQ}"
echo "FIELD_ROW_ID=${RT_FIELD_ID}"
exit $?
在我的脚本中,首先我调用该函数FIELD_VALUES_1SQ_FUNC
来生成一个序列号。
其次,我打电话给RT_FIELD_IDS_FUNC ${TABLE_NAME} ${COL_NAME}
它会获得一些价值的地方。
第三,RT_SEQ_CHECK_FUNC ${FIELD_VALUES_1SQ} ${RT_FIELD_ID}
调用该函数,检查该值是否存在于数据库中。如果值在那里,那么我应该FIELD_VALUES_1SQ_FUNC()
再次调用以生成一个新的序列值并用RT_SEQ_CHECK_FUNC ${FIELD_VALUES_1SQ} ${RT_FIELD_ID}
函数检查它,除非在函数中找不到该选择的FIELD_VALUES_1SQ_FUNC()
值。
关于如何实现这一点的任何想法!
您要查找的内容称为
while
循环。考虑这个简单的例子:while 循环做两件事,暗示程序员必须做第三件事。
n
小于 5?如果条件为真,则:
while
循环体执行一次while
返回步骤 1 并再次测试条件如果条件不成立,则循环终止,脚本继续执行
done
循环关键字后面的语句。第三件事,程序员的责任,是在循环体内做一些事情,将(或可能)改变条件表达式的状态。在上面的简单示例中,该步骤就是
n = $(($n+1))
语句。没有这个,循环将变得无限,因为条件最初为真并且永远不会改变。尝试在注释掉该行的情况下运行脚本,看看会发生什么。然后按CtrlC。要针对您的特定问题定制此示例,我认为您需要
[ -z "${RT_SEQ_CHECK}" ]
针对您的while
情况否定测试。我的意思是什么时候[ -z "${RT_SEQ_CHECK}" ]
是真的,这意味着${RT_SEQ_CHECK}
零长度,那就是你想要停止循环的时候。幸运的是,test
有与该-n
选项完全相反的-z
选项。因此,从广义上讲,您的
while
循环大致如下所示:最后,我希望对您的代码结构提出建设性意见。您倾向于使用全局变量从函数返回值,然后在代码主体中引用这些全局变量。这会使代码难以阅读和遵循。而不是以这种风格编码:
尝试这个:
同样,应用您的代码可能会导致类似这样的结果: