首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Oracle 資料表匯出 INSERT 腳本:SQL*Plus SPOOL 實戰技巧

     編輯:關於SqlServer

需求場景

將 Oracle 資料表資料匯出為可直接執行的 INSERT 敘述腳本,便於異機匯入或版本控管。

SQL*Plus 腳本範例

SET HEADING OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SET LINESIZE 2000
SET TRIMSPOOL ON

SPOOL d:\text.sql

SELECT 'INSERT INTO addrmap(RAW_ADDR, RAW_ADDR_TYPE, MAPPED_ADDR, MAPPED_ADDR_TYPE, STATUS, DESCRIPTION, DISTRICT) VALUES (''' 
       || RAW_ADDR || ''',''' 
       || RAW_ADDR_TYPE || ''',''' 
       || MAPPED_ADDR || ''',''' 
       || MAPPED_ADDR_TYPE || ''',''' 
       || STATUS || ''',''' 
       || DESCRIPTION || ''',''' 
       || DISTRICT || ''');'
FROM addrmap;

SPOOL OFF

關鍵設定說明

字串串接技巧

  • Oracle 用 || 串接字串
  • 單引號跳脫:'''' 代表字串中的單引號
  • NULL 值處理:可用 NVL(欄位, 'NULL') 或 CASE WHEN 欄位 IS NULL THEN 'NULL' ELSE ''''||欄位||'''' END

進階版:處理 NULL 與特殊字元

SELECT 'INSERT INTO addrmap(...) VALUES (' 
       || NVL2(RAW_ADDR, ''''||REPLACE(RAW_ADDR, '''', '''''')||'''', 'NULL') || ','
       || NVL2(RAW_ADDR_TYPE, ''''||REPLACE(RAW_ADDR_TYPE, '''', '''''')||'''', 'NULL') || ','
       ...
       || ');'
FROM addrmap;

REPLACE(欄位, '''', '''''') 將單引號加倍跳脫,NVL2 優雅處理 NULL。

執行與驗證

  1. SQL*Plus 執行腳本產生 d:\text.sql
  2. 用文字編輯器檢查前幾行格式正確
  3. 目標資料庫執行 @d:\text.sql 匯入

優缺點評估

指令作用
SET HEADING OFF不顯示欄位標題
SET FEEDBACK OFF不顯示「X rows selected.」
SET PAGESIZE 0取消分頁,避免換頁字元
SET LINESIZE 2000加大行寬,防止長 INSERT 截斷換行
SET TRIMSPOOL ON移除輸出行尾空白
SPOOL 路徑將後續輸出導向檔案

適合中小型資料表、結構調整、測試資料遷移等場景。大量資料建議用 Data Pump (expdp/impdp) 或 SQL Loader。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
優點缺點
純 SQL*Plus 完成,無需額外工具大量資料(百萬列+)檔案極大、執行慢
腳本可讀、可版控、可編輯不支援 BLOB/CLOB 大物件
跨平台、跨版本相容性佳需手動處理欄位順序、型別對應