sql injection violation, syntax error: TODO : LITERAL_INT top
select top 20 * from (...) a where row_number > 0 order by row_number
Druid 解析器按 Oracle 方言檢測,發現 `SELECT TOP` 非法語法。
**Oracle 無 `TOP` 關鍵字**,分頁需用 `ROWNUM` 或 `ROW_NUMBER()` 窗口函數。
-- 方案一:ROWNUM 子查詢(通用)
SELECT * FROM (
SELECT a.*, ROWNUM rn FROM (
SELECT id, name, ... FROM wf_process WHERE state = ? ORDER BY name
) a WHERE ROWNUM <= 20
) WHERE rn > 0;
-- 方案二:ROW_NUMBER() 窗口函數(Oracle 12c+)
SELECT * FROM (
SELECT t.*, ROW_NUMBER() OVER (ORDER BY name) rn
FROM wf_process t WHERE state = ?
) WHERE rn BETWEEN 1 AND 20;