긴 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;"