SQL 코드로 중복 코드를 호출하는 가장 좋은 방법

SQL 코드로 중복 코드를 호출하는 가장 좋은 방법

데이터베이스에 대해 SQL 명령을 실행하는 일부 반복적인 코드를 호출하려면 일부 셸 스크립트를 개발해야 합니다. 이러한 SQL 명령을 사용하는 외부 쉘 스크립트인 외부 쉘 스크립트에서 이러한 기능을 사용하는 가장 좋은 방법은 무엇입니까? 아니면 왜요?

답변1

함수로 작성하고 스크립트에 포함시키면 됩니다.

예를 들어 "util" 또는 "function script"를 작성합니다. 이라고 부르자 util.sh. 기능만 있다:

#!/bin/sh

sqlCall () {
   echo "sqlCall(), \$1:["${1}"]"
}

repeatedFunction () {
   echo "repeated x:["${1}"] times"
   RETURNVAR=`date`
}

그런 다음 script1.sh및 다음과 같이 포함될 수 있습니다 script2.sh.util.sh

#!/bin/sh
#
# script 1 - includes util.sh, calls only sqlCall

# Include the functions
. /path/to/util.sh

var="s1 s2 s3"
for s in $var
do
    sqlCall $s
done

이것은script2.sh

#!/bin/sh
#
# script 2 - includes util.sh, calls only repeatedFunction

# Include the functions
. /path/to/util.sh

i=0
while [ $i -lt 4 ]
do
    repeatedFunction $i
    i=$(($i + 1))
done
echo "Date: ${RETURNVAR}"

결과는 다음과 같습니다:

sh ./script1.sh

sqlCall(), $1:[s1]
sqlCall(), $1:[s2]
sqlCall(), $1:[s3]

sh ./script2.sh
repeated x:[0] times
repeated x:[1] times
repeated x:[2] times
repeated x:[3] times
Date: Fri Jun 16 21:15:24 AEST 2017

답변2

SQL 명령이 이전 SQL 명령의 결과에 의존하지 않는 경우 SQL 클라이언트로 파이프하거나 텍스트 파일에 저장하여 SQL 클라이언트에 제공하세요.

while [ some condition ]; do
    # something that sets val1, val2 and val3 in this example
    # output INSERT statement (for example):
    printf 'INSERT INTO t (c1, c2, c3) VALUES (%s, %s, %s);\n' "$val1" "$val2" "$val3"
done | mysql -h server database

당신은 무엇을 해야피하다예를 들어 SQL 클라이언트에 대한 순환 호출입니다.

while ...; do
    echo "statement" | mysql -h server database
done

이는 각 명령문에 대한 연결 및 인증을 수행하고비정상적으로느린.

관련 정보