매우 긴 문자열 변수인가요?

매우 긴 문자열 변수인가요?

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

관련 정보