在 Oracle 中撰寫 SELECT * FROM users AS u 會拋出 ORA-00933: SQL command not properly ended,而 SQL Server、PostgreSQL、MySQL 均支援。本文說明語法差異根因與正確寫法。
-- Oracle 報錯
SELECT * FROM users AS u;
-- ORA-00933: SQL command not properly ended
-- 正確寫法(省略 AS)
SELECT * FROM users u;
-- 或加雙引號保留大小寫
SELECT * FROM users "u";
table_name [AS] alias,AS 為可選關鍵字AS**,僅支援 table_name alias;但 **支援欄位別名的 AS**(SELECT col AS alias FROM ...)ASs/\bAS\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/ \1/g 批次清理CREATE VIEW v_users AS SELECT * FROM users,應用端查詢視圖hibernate.use_sql_comments、MyBatis、EF Core 均有方言適配,確認生成 SQL 不含表別名 AS-- 測試表別名 AS 是否報錯
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM dual AS d';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
/
Oracle 語法嚴格遵循歷史演進路徑,表別名省略 AS 是 30 年來的相容性決策。跨資料庫開發時,建立「SQL 方言差異清單」並納入 CI 檢查,可避免大量上線後報錯。