You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<action>必须使用:SELECT ... FROM (内层完整查询) WHERE ROWNUM <= N</action>
69
+
<condition>否则(简单查询)</condition>
70
+
<action>可以使用:SELECT ... FROM table WHERE conditions AND ROWNUM <= N</action>
71
+
</decision-flow>
72
+
73
+
<error-example>
74
+
-- 错误:ROWNUM在内层影响分组结果
75
+
SELECT ... GROUP BY ... WHERE ROWNUM <= N
76
+
</error-example>
77
+
78
+
<correct-example>
79
+
-- 正确:ROWNUM在外层
80
+
SELECT ... FROM (SELECT ... GROUP BY ...) WHERE ROWNUM <= N
81
+
</correct-example>
49
82
</rule>
50
83
51
84
other_rule: |
@@ -73,7 +106,7 @@ template:
73
106
SELECT "订单ID", "金额" FROM "TEST"."ORDERS" "t1" WHERE ROWNUM <= 100 -- 错误:缺少英文别名
74
107
SELECT COUNT("订单ID") FROM "TEST"."ORDERS" "t1" -- 错误:函数未加别名
75
108
</output-bad>
76
-
<output-good>
109
+
<output-good version="12c-below">
77
110
SELECT
78
111
"t1"."订单ID" AS "order_id",
79
112
"t1"."金额" AS "amount",
@@ -90,14 +123,22 @@ template:
90
123
SELECT DATE, status FROM PUBLIC.USERS -- 错误:未处理关键字和引号
91
124
SELECT "DATE", ROUND(active_ratio) FROM "PUBLIC"."USERS" -- 错误:百分比格式错误
92
125
</output-bad>
93
-
<output-good>
126
+
<output-good version="12c-below">
94
127
SELECT
95
128
"u"."DATE" AS "create_date",
96
129
TO_CHAR("u"."active_ratio" * 100, '990.99') || '%' AS "active_percent"
97
130
FROM "PUBLIC"."USERS" "u"
98
131
WHERE "u"."status" = 1
99
132
AND ROWNUM <= 1000
100
133
</output-good>
134
+
<output-good version="12c+">
135
+
SELECT
136
+
"u"."DATE" AS "create_date",
137
+
TO_CHAR("u"."active_ratio" * 100, '990.99') || '%' AS "active_percent"
138
+
FROM "PUBLIC"."USERS" "u"
139
+
WHERE "u"."status" = 1
140
+
FETCH FIRST 1000 ROWS ONLY
141
+
</output-good>
101
142
</example>
102
143
103
144
<example>
@@ -108,9 +149,9 @@ template:
108
149
count(*) AS "user_count"
109
150
FROM "PUBLIC"."USERS" "u"
110
151
WHERE "u"."status" = 1
111
-
AND ROWNUM <= 100
152
+
AND ROWNUM <= 100 -- 严重错误:影响分组结果!
112
153
GROUP BY "u"."DEPARTMENT"
113
-
ORDER BY "department_name" -- 错误:ROWNUM 应当写在最外层,这样会导致查询结果条数比实际数据的数量少
154
+
ORDER BY "department_name"
114
155
</output-bad>
115
156
<output-bad>
116
157
SELECT "department_name", "user_count" FROM
@@ -123,7 +164,7 @@ template:
123
164
ORDER BY "department_name"
124
165
WHERE ROWNUM <= 100 -- 错误:语法错误,同级内只能有一个WHERE
125
166
</output-bad>
126
-
<output-good>
167
+
<output-good version="12c-below">
127
168
SELECT "department_name", "user_count" FROM (
128
169
SELECT
129
170
"u"."DEPARTMENT" AS "department_name",
@@ -133,12 +174,22 @@ template:
133
174
GROUP BY "u"."DEPARTMENT"
134
175
ORDER BY "department_name"
135
176
)
136
-
WHERE ROWNUM <= 100 -- 外层限制(确保最终结果可控)
177
+
WHERE ROWNUM <= 100 -- 正确,在外层限制数量(确保最终结果可控)
178
+
</output-good>
179
+
<output-good version="12c+">
180
+
SELECT
181
+
"u"."DEPARTMENT" AS "department_name",
182
+
count(*) AS "user_count"
183
+
FROM "PUBLIC"."USERS" "u"
184
+
WHERE "u"."status" = 1
185
+
GROUP BY "u"."DEPARTMENT"
186
+
ORDER BY "department_name"
187
+
FETCH FIRST 100 ROWS ONLY
137
188
</output-good>
138
189
</example>
139
190
</basic-examples>
140
191
141
-
example_engine: Oracle 19c
192
+
example_engine: Oracle 11g
142
193
example_answer_1: |
143
194
{"success":true,"sql":"SELECT \"country\" AS \"country_name\", \"continent\" AS \"continent_name\", \"year\" AS \"year\", \"gdp\" AS \"gdp\" FROM \"Sample_Database\".\"sample_country_gdp\" ORDER BY \"country\", \"year\"","tables":["sample_country_gdp"],"chart-type":"line"}
0 commit comments