我正在尝试用bash中的数组创建一个表。我已经想出如何从文本文件中创建数组,但是创建表要么不起作用,要么只使用数组中的最后一个值。我想做一些不可能的事吗?
我的剧本:
readarray -t array < file.txt
for e in "${array[@]}"
do
DB_PATH=""
DB_NAME=$DB_PATH"Test.db"
sqlite3 $DB_NAME << EOF
DROP TABLE IF EXISTS tblA;
CREATE TABLE tblA(A,B,C);
INSERT INTO tblA (A,B) SELECT tblB.A,tblB.B,1 FROM tblB WHERE tblB.D="$e";
EOF
done
我还试过WHERE tblB.D="${array[@]}";
已编辑以包含整个SQL代码。
答案 0 :(得分:1)
问题是在每次循环迭代中都会重新创建表(即清空)。
仅创建一次表。在循环内部,只执行INSERT。
答案 1 :(得分:1)
虽然主键继续增加而不是重新开始(一个小问题),但此脚本正在运行:
sqlite3 Test.db "DELETE FROM tblA;"
getArray() {
array=()
while IFS= read -r line
do
array+=("$line")
done < "$1"
}
getArray "file.txt"
for e in "${array[@]}"
do
DB_PATH=""
DB_NAME=$DB_PATH"Test.db"
sqlite3 $DB_NAME << EOF
INSERT INTO tblA (A,B) SELECT tblB.A,tblB.B,1 FROM tblB WHERE tblB.D="$e";
EOF
done