首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle SQL 執行時間精準測量與 SP2-0027 錯誤完美解決

     編輯:Oracle 資料庫相關知識

一鍵開啟執行計時

SQL> SET TIMING ON
SQL> SELECT COUNT(*) FROM comm_human_role;

  COUNT(*)
----------
       866

Elapsed: 00:00:00.05

輸出格式:HH:MI:SS.ff(時:分:秒.百分秒)。00:00:00.05 = 50 毫秒;00:03:235.78 = 235.78 秒 ≈ 3 分 55.78 秒。

進階效能分析三件套

SET LINESIZE 190        -- 寬度 190 字元,避免換行截斷
SET AUTOTRACE ON        -- 顯示執行計畫 + 統計資訊(需 PLUSTRACE 權限)
SET TIMING ON           -- 顯示耗時

AUTOTRACE 需執行 @$ORACLE_HOME/sqlplus/admin/plustrce.sql 並授權 GRANT PLUSTRACE TO user;。

SP2-0027 錯誤:單行超長 2499 字元

錯誤訊息:SP2-0027: Input is too long (> 2499 characters) - line ignored

原因:SQL*Plus 緩衝區限制單行輸入不超過 2499 位元組。

解決方案

  1. 換行拆分:在 SQL 邏輯允許處(關鍵字後、逗號後、運算子前)按 Enter 換行,確保每行 < 2499 字元。
  2. 使用腳本檔案:將長 SQL 存入 .sql 檔,用 @script.sql 執行,繞過命令列限制。
  3. 調大 LINESIZE:SET LINESIZE 32767(最大值),但無法突破 2499 字元輸入限制,僅影響輸出顯示。

實戰範例:長 IN 列表拆分

-- 錯誤:單行過長
SELECT * FROM big_table WHERE id IN (1,2,3,...,5000);

-- 正確:多行輸入
SELECT * FROM big_table
WHERE id IN (
    1,2,3,...,1000,
    1001,1002,...,2000,
    ...
    4001,...,5000
);

或使用臨時表 / 全局暫存表載入大量值再連接,效能更優。

總結

SET TIMING ON 是最輕量的計時工具;AUTOTRACE 提供計畫與統計;長 SQL 必須拆行或寫腳本。養成「先 SET 三件套,再跑 SQL」習慣,調優事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved