長い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 シェルには通常変数タイプはありません。文字列のみを使用すると、私のシステムでを実行して文字列の最大長を取得できます。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;"