必要
データベースにテキストファイルの値を追加する必要があります。
以下は私のシェルスクリプトです
#!/bin/bash
DB_USERNAME='xxx'
DB_PASSWORD='xxxx'
DB_HOST='xxxx'
DB_PORT=xxx
DB_SERVICE='xxxx'
DB_CONNECTION=$DB_USERNAME/$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_SERVICE
echo $DB_CONNECTION
while read f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20 f21 f22 f23 f24 f25 f26 f27
do
sqlplus -s $DB_CONNECTION <<EOF
insert into GPRS_FILTER_TABLE_2 values($f1,$f2,(TO_DATE($f3,'YYYY-MM-DD HH24-MI-SS')),$f4,$f5,$f6,$f7,$f8,$f9,$f10,$f11,$f12,$f13,$f14,$f15,$f16,$f17,$f18,$f19,
$f20,$f21,$f22,$f23,$f24,$f25,$f26,$f27);
commit;
EOF
done < /home/work/test.txt
exit
test.txt ファイルの値です。
'2341212121212' '17' '2020/05/25-15-55-03' NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL '33312212' 'vpn' '785' '0' NULL NULL NULL 'AUSTA' NULL '0' '39' 'ZBRCT1121300000001' 'Roaming GPRS' '223333'
次のエラーが発生します。
insert into GPRS_FILTER_TABLE_2 values('Roaming,GPRS',(TO_DATE('357217094875381','YYYY-MM-DD HH24-MI-SS')),,,,,,,,,,,,,,,,,
*
ERROR at line 1:
ORA-00936: missing expression
text.txtの2行目が新しい行として機能するようです。
答え1
スクリプトで次をsqlplus -s $DB_CONNECTION
置き換えると、cat
問題が表示されます。
xxx/xxxx@xxxx:xxx/xxxx
insert into GPRS_FILTER_TABLE_2 values('2341212121212','17',(TO_DATE('2020/05/25-15-55-03','YYYY-MM-DD HH24-MI-SS')),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'33312212','vpn','785','0',NULL,NULL,
NULL,'AUSTA',NULL,'0','39','ZBRCT1121300000001','Roaming,GPRS' '223333');
このread
ステートメントはソースデータファイルの引用符を考慮しないので、'Roaming
それ自体が値です。通常、GPRS'
これは次の変数になりますが、入力を受け取る他の変数がないため、最後の変数は行の残りの部分全体に割り当てられますGPRS' '223333'
。
あなたの質問に示されている問題に対する簡単な解決策はありません。不変性を中心に再設計することです。理想的には、データと同じ文字(スペース)を使用して値を区別しないようにデータファイルを変更できます。