-1

以下の 3 つのフィールドを含む CSV があります。

value1, value2, value 3

注: 3 番目のフィールドの「値」と「3」の間にはスペースがあります。

perl DBD::Oracle と DBI を使用して、このデータを行ごとに Oracle DB にアップロードしています。

アップロードに使用しているクエリは次のとおりです。

$dbh->do ("INSERT INTO $table VALUES ($col1_value, $col2_value, $col3_value)");

ただし、アップロードに失敗し、次のように不平を言っています。

DBD::Oracle::db do failed: ORA-00917: missing comma (DBD ERROR: error possibly near <*> indicator at char 103 in 'INSERT INTO TABLE_NAME VALUES (value1, value2, value <*>3 )')

そのため、スペースを含む 3 番目の値で失敗しています。

「スペース」を含む文字列をOracleにアップロードする方法を教えてください。

ところで、私はオラクルの人ではないので、私がやっていることが間違っている場合は指摘してください。

タナクス。

4

1 に答える 1

4

多くの理由 (セキュリティ、効率、正確さ) から、プレースホルダーを使用して値を SQL に入れたいと思うでしょう。

my $rows = $dbh->do (
    "INSERT INTO $table VALUES (?, ?, ?)",
    undef,
    $col1_value, $col2_value, $col3_value
);

これにより、構文とセキュリティの両方の目的でエスケープを行う必要がなくなります。

于 2012-07-25T06:50:26.017 に答える