Oracle から MySQL にデータを変換するには?

ショコラ
ショコラ

Oracle から MySQL にデータを変換するには?

昔、PHP で変換するプログラムを作ったのでメモっておきますね。
※このままでは動きません。

もっさん先輩
もっさん先輩

// カラムの情報を取得します。
$header = $cols = $types = [];
$sql = "SELECT * FROM all_tab_columns WHERE table_name='{$table}' ORDER BY column_id";
foreach ($pdo->query($sql) as $row) {
  $col = strtolower($row['column_name']);
  $header[] = $col;
  $cols[] = ('DATE' == $row['data_type']) ? "TO_CHAR({$col},'YYYY-MM-DD HH24:MI:SS') AS {$col}" : $col;
  $types[$col] = $row['data_type'];
}

// ヘッダーを出力します。
$fp = fopen($table.'.dmp','w');
fputs($fp,implode(',',$header)."\r\n");

// データを出力します。
$sql = "SELECT ".implode(',',$cols)." FROM {$table}";
foreach ($pdo->query($sql) as $row) {
  $data = [];
  foreach ($types as $col => $type) {
    $val =  $row[$col];
    if ('' == $val) {
      $val = '\\N';
    } else if (in_array($type,['VARCHAR2','CHAR'])) {
      $val = '"'.mb_ereg_replace('"','""',$val).'"';
    }
    $data[] = $val;
  }
  fputs($fp,implode(',',$data)."\r\n");
}
fclose($fp);
Scroll to Top