是否有更长的类型变量来构建冗长的 sql 语句?如何添加新行呢?我想将语句存储在一个很长的变量文本中,以便我可以从 sql 提示符运行它。我认为如果我使用普通变量,它会超出限制。谢谢
export DATABASE_LIST="/location/dblist.cfg"
export SQL_INSERT_TEXT=""
while read -r USERID ORACLE_SID2
do
### how do I do this if too long?? and add new line
SQL_INSERT_TEXT="${SQL_INSERT_TEXT} longgSqlStatements; \newline"
done < <(tac $DATABASE_LIST)
echo ${SQL_INSERT_TEXT}
export sqllog = "/location/sqllog.log"
$ORACLE_HOME/bin/sqlplus -S accnt_name@db_name << EOF >${sqllog}
${SQL_INSERT_TEXT}
EOF
答案1
Linux shell 通常没有任何变量类型。只有字符串,可以通过运行获得字符串的最大长度getconf ARG_MAX
;在我的系统上,最大字符串约为2M字符长。
尝试使用 的bash
内置函数printf -v
方便地加载带有新行的变量,如下所示:
printf -v s "%s\n" hello there, this works "with quotes" too\.
echo "$s"
输出:
hello
there,
this
works
with quotes
too.
所以语法可能是这样的:
printf -v SQL_INSERT_TEXT '%s\n' "${SQL_INSERT_TEXT}" "longgSqlStatements;"
或者,根据需要,也许:
printf -v SQL_INSERT_TEXT '%s\n' "${SQL_INSERT_TEXT} longgSqlStatements;"