improved oracle sql parser.

This commit is contained in:
高铁
2020-12-12 22:12:39 +08:00
parent c5da302796
commit 65b6ea4ce4
43 changed files with 364 additions and 184 deletions
@@ -797,6 +797,16 @@ public class OracleExprParser extends SQLExprParser {
}
accept(Token.RPAREN);
if (lexer.stringVal().equalsIgnoreCase("IGNORE")) {
lexer.nextToken();
acceptIdentifier("NULLS");
aggregateExpr.setIgnoreNulls(true);
} else if (lexer.identifierEquals(FnvHash.Constants.RESPECT)) {
lexer.nextToken();
acceptIdentifier("NULLS");
aggregateExpr.setIgnoreNulls(false);
}
if (lexer.identifierEquals(FnvHash.Constants.WITHIN)) {
lexer.nextToken();
@@ -2058,6 +2058,10 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
print(')');
if (x.isIgnoreNulls()) {
print0(ucase ? " IGNORE NULLS" : " ignore nulls");
}
SQLKeep keep = x.getKeep();
if (keep != null) {
print(' ');
@@ -2819,6 +2819,10 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
}
protected final void statExpr(SQLExpr x) {
if (x == null) {
return;
}
Class<?> clazz = x.getClass();
if (clazz == SQLIdentifierExpr.class) {
visit((SQLIdentifierExpr) x);
@@ -20,6 +20,8 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import org.junit.Assert;
@@ -33,11 +35,45 @@ import com.alibaba.druid.util.JdbcUtils;
public class OracleResourceTest extends OracleTest {
public void test_0() throws Exception {
// 13
// exec_test("bvt/parser/oracle-56.txt");
for (int i = 0; i <= 57; ++i) { // 57
public void test_0_9() throws Exception {
for (int i = 0; i <= 9; ++i) { // 57
exec_test("bvt/parser/oracle-" + i + ".txt");
System.out.println();
}
}
public void test_10_19() throws Exception {
for (int i = 10; i <= 19; ++i) { // 57
exec_test("bvt/parser/oracle-" + i + ".txt");
System.out.println();
}
}
public void test_20_29() throws Exception {
for (int i = 20; i <= 29; ++i) { // 57
exec_test("bvt/parser/oracle-" + i + ".txt");
System.out.println();
}
}
public void test_30_39() throws Exception {
for (int i = 30; i <= 39; ++i) { // 57
exec_test("bvt/parser/oracle-" + i + ".txt");
System.out.println();
}
}
public void test_40_49() throws Exception {
for (int i = 40; i <= 49; ++i) { // 57
exec_test("bvt/parser/oracle-" + i + ".txt");
System.out.println();
}
}
public void test_50_57() throws Exception {
for (int i = 50; i <= 57; ++i) { // 57
exec_test("bvt/parser/oracle-" + i + ".txt");
System.out.println();
}
}
@@ -45,6 +81,14 @@ public class OracleResourceTest extends OracleTest {
exec_test("bvt/parser/oracle-58.txt");
}
public void test_59() throws Exception {
exec_test("bvt/parser/oracle-59.txt");
}
public void test_60() throws Exception {
exec_test("bvt/parser/oracle-60.txt");
}
public void exec_test(String resource) throws Exception {
System.out.println(resource);
InputStream is = null;
@@ -55,7 +99,12 @@ public class OracleResourceTest extends OracleTest {
JdbcUtils.close(reader);
String[] items = input.split("---------------------------");
String sql = items[0].trim();
String expect = items[1].trim();
String expect = null;
if (items.length > 1) {
expect = items[1];
expect = expect.trim();
expect = expect.replaceAll("\\r\\n", "\n");
}
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
@@ -78,23 +127,17 @@ public class OracleResourceTest extends OracleTest {
System.out.println();
System.out.println();
}
void mergValidate(String sql, String expect) {
MySqlStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
System.out.println(out.toString());
Assert.assertEquals(expect, out.toString());
if (statementList.size() == 1) {
SQLStatement stmt = statementList.get(0);
if (expect != null && !expect.isEmpty()) {
assertEquals(expect, stmt.toString());
}
} else {
if (expect != null && !expect.isEmpty()) {
assertEquals(expect, SQLUtils.toSQLString(statementList, DbType.oracle));
}
}
}
}
+7 -1
View File
@@ -15,5 +15,11 @@ ORDER BY id   ;
---------------------------
SELECT ID AS id, to_char(GMT_MODIFIED, 'yyyymmdd hh24:mi:ss') AS gmtModified, COL5 AS col5
FROM ABC_ABC
WHERE IS_DELETED = 'n' AND end_time IS NULL AND deadline_time < sysdate AND approval_time IS NULL AND id > :1 AND (col2 IN (:2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23, :24, :25, :26, :27, :28, :29, :30, :31, :32, :33) AND rownum < :34)
WHERE IS_DELETED = 'n'
AND end_time IS NULL
AND deadline_time < SYSDATE
AND approval_time IS NULL
AND id > :1
AND col2 IN (:2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23, :24, :25, :26, :27, :28, :29, :30, :31, :32, :33)
AND rownum < :34
ORDER BY id;
+4 -2
View File
@@ -68,14 +68,16 @@ SELECT ID, GMT_MODIFIED, MODIFIER, GMT_CREATE, CREATOR
, CATEGORY_ID, REMARK, MEMBER_ID, SALES_OWNER_ID, ACCOUNT_ID
, IS_DELETED, CUST_GRADE
FROM APOLLO_ZEUS.GLOBAL_ACCOUNT
WHERE ACCOUNT_ID = :B2 AND DOMAIN = :B1
WHERE ACCOUNT_ID = :B2
AND DOMAIN = :B1
UNION ALL
SELECT ID, GMT_MODIFIED, MODIFIER, GMT_CREATE, CREATOR
, DOMAIN, EMPLOYEE_NUMBER, COMPANY_NAME, HOMEPAGE_URL, BACKGROUND
, CATEGORY_ID, REMARK, MEMBER_ID, SALES_OWNER_ID, ACCOUNT_ID
, IS_DELETED, CUST_GRADE
FROM APOLLO_NIR.GLOBAL_ACCOUNT
WHERE ACCOUNT_ID = :B2 AND DOMAIN = :B1;
WHERE ACCOUNT_ID = :B2
AND DOMAIN = :B1
+1 -1
View File
@@ -6,5 +6,5 @@ SELECT salary FROM employees
---------------------------
SELECT salary
FROM employees
VERSIONS BETWEEN TIMESTAMP SYSTIMESTAMP - INTERVAL '10' MINUTE AND SYSTIMESTAMP - INTERVAL '1' MINUTE
VERSIONS BETWEEN TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE) AND SYSTIMESTAMP - INTERVAL '1' MINUTE
WHERE last_name = 'Chung';
+1 -1
View File
@@ -10,5 +10,5 @@ SET salary = (
FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' MINUTE)
WHERE last_name = 'Chung'
)
)
WHERE last_name = 'Chung';
+5 -2
View File
@@ -7,9 +7,12 @@ SELECT DECODE(GROUPING(department_name), 1, 'All Departments',
GROUP BY CUBE (department_name, job_id)
ORDER BY department_name, job_id;
---------------------------
SELECT DECODE(GROUPING(department_name), 1, 'All Departments', department_name) AS department_name, DECODE(GROUPING(job_id), 1, 'All Jobs', job_id) AS job_id, COUNT(*) AS "Total Empl", AVG(salary) * 12 AS "Average Sal"
SELECT DECODE(GROUPING(department_name), 1, 'All Departments', department_name) AS department_name
, DECODE(GROUPING(job_id), 1, 'All Jobs', job_id) AS job_id
, COUNT(*) AS "Total Empl"
, AVG(salary) * 12 AS "Average Sal"
FROM employees e, departments d
WHERE d.department_id = e.department_id
GROUP BY CUBE(department_name, job_id)
GROUP BY CUBE (department_name, job_id)
ORDER BY department_name, job_id;
+9 -2
View File
@@ -13,9 +13,16 @@ SELECT channel_desc, calendar_month_desc, co.country_id,
(channel_desc, co.country_id),
(calendar_month_desc, co.country_id) );
---------------------------
SELECT channel_desc, calendar_month_desc, co.country_id, TO_CHAR(sum(amount_sold), '9,999,999,999') AS SALES$
SELECT channel_desc, calendar_month_desc, co.country_id
, TO_CHAR(sum(amount_sold), '9,999,999,999') AS SALES$
FROM xxxx, bbb, times, ccc, ddd co
WHERE xxxx.time_id = times.time_id AND xxxx.cust_id = bbb.cust_id AND xxxx.channel_id = ccc.channel_id AND bbb.country_id = co.country_id AND (ccc.channel_desc IN ('Direct Sales', 'Internet') AND (times.calendar_month_desc IN ('2000-09', '2000-10') AND co.country_iso_code IN ('UK', 'US')))
WHERE xxxx.time_id = times.time_id
AND xxxx.cust_id = bbb.cust_id
AND xxxx.channel_id = ccc.channel_id
AND bbb.country_id = co.country_id
AND ccc.channel_desc IN ('Direct Sales', 'Internet')
AND times.calendar_month_desc IN ('2000-09', '2000-10')
AND co.country_iso_code IN ('UK', 'US')
GROUP BY GROUPING SETS ((channel_desc, calendar_month_desc, co.country_id), (channel_desc, co.country_id), (calendar_month_desc, co.country_id));
+19 -10
View File
@@ -20,24 +20,33 @@ FROM (SELECT A.*, rownum cnt
WHERE ROWNUM < ?) WHERE CNT > ?
---------------------------
SELECT *
FROM (SELECT A.*, rownum AS cnt
FROM (SELECT A.CUSTID, A.PAYCOUNT, A.MEMBERID, A.ACCREDITSTATUS, C.CUSTNAME
FROM (
SELECT A.*, rownum AS cnt
FROM (
SELECT A.CUSTID, A.PAYCOUNT, A.MEMBERID, A.ACCREDITSTATUS, C.CUSTNAME
, C.CONTNAME, C.CONTPHONECITYCODE, C.CONTPHONE, C.CONTMOBPHONE, C.CONTFAXCITYCODE
, C.CONTFAX, C.CONTEMAIL, C.CUSTAREA AS AREANAME, C.CUSTADDR, C.ORGINDUSTRY AS ORGINDUSTRYNAME
, E.DESCRIPTION AS CUSTSTATNAME, F.DESCRIPTION AS ATYPENAME, NULL AS FNAME, G.DESCRIPTION AS B2BVALIDFLAGNAME, A.VALIDFLAG
FROM Q_CUSTOMERS A, Q_CUSTINFO C, (SELECT *
FROM Q_CUSTOMERS A, Q_CUSTINFO C, (
SELECT *
FROM F_A_DE
WHERE DOMAINCD = 'CUSTOMERS_CUSTSTAT'
) E, (SELECT *
) E, (
SELECT *
FROM F_A_DE
WHERE DOMAINCD = 'CUSTOMERS_ATYPE'
) F, (SELECT *
) F, (
SELECT *
FROM F_A_DE
WHERE DOMAINCD = 'CUSTOMERS_B2BVALIDFLAG'
) G
WHERE A.CUSTID = C.CUSTID AND A.CUSTSTAT = CODE(+) AND A.ATYPE = CODE(+) AND A.b2bValidFlag = CODE(+) AND A.MEMBERID = ?
) G
WHERE A.CUSTID = C.CUSTID
AND A.CUSTSTAT = E.CODE(+)
AND A.ATYPE = F.CODE(+)
AND A.b2bValidFlag = G.CODE(+)
AND A.MEMBERID = ?
ORDER BY A.CUSTID DESC
) A
) A
WHERE ROWNUM < ?
)
WHERE CNT > ?;
)
WHERE CNT > ?
+7 -5
View File
@@ -10,12 +10,14 @@ WHERE CNT > ?
---------------------------
SELECT ID, CLASSTYPE, KEY, VALUE
FROM (SELECT A.*, ROWNUM AS CNT
FROM (SELECT ID, CLASSTYPE, KEY, VALUE
FROM (
SELECT A.*, ROWNUM AS CNT
FROM (
SELECT ID, CLASSTYPE, KEY, VALUE
FROM F_XXX
WHERE CLASSTYPE = ?
ORDER BY ID DESC
) A
) A
WHERE ROWNUM < ?
)
WHERE CNT > ?;
)
WHERE CNT > ?
+19 -10
View File
@@ -21,19 +21,28 @@ WHERE k.cnt > ?
ORDER BY memberid ASC, createtime DESC
---------------------------
SELECT custid, memberid, to_char(createtime, 'yyyy-mm-dd hh24:mi:ss') AS createtime, planid, auditstate
, to_char(modifytime, 'yyyy-mm-dd hh24:mi:ss') AS modifytime, createid, to_char(custappdate, 'yyyy-mm-dd hh24:mi:ss') AS custappdate, executeState, gmtcreate
, custname, planbatchid
FROM (SELECT custid, memberid, createtime, planid, auditstate
SELECT custid, memberid, to_char(createtime, 'yyyy-mm-dd hh24:mi:ss') AS createtime
, planid, auditstate, to_char(modifytime, 'yyyy-mm-dd hh24:mi:ss') AS modifytime
, createid, to_char(custappdate, 'yyyy-mm-dd hh24:mi:ss') AS custappdate, executeState
, gmtcreate, custname, planbatchid
FROM (
SELECT custid, memberid, createtime, planid, auditstate
, createid, custappdate, executeState, custname, gmtcreate
, cnt, planbatchid, modifytime
FROM (SELECT p.custid, p.memberid, p.createtime, p.planid, p.auditstate
FROM (
SELECT p.custid, p.memberid, p.createtime, p.planid, p.auditstate
, p.createid, p.custappdate, p.modifytime, p.gmtcreate, p.executeState
, c.custname, row_number() OVER ( ORDER BY p.memberid ASC, p.createtime DESC) AS cnt, p.planbatchid
, c.custname, row_number() OVER (ORDER BY p.memberid ASC, p.createtime DESC) AS cnt, p.planbatchid
FROM x_plp_f_u_c_k p, x_xcde c
WHERE p.custid = c.custid AND p.applytype = 0 AND p.createtime BETWEEN to_date(?, 'yyyy-mm-dd') AND to_date(?, 'yyyy-mm-dd hh24:mi:ss') AND (p.auditstate = ? AND p.executestate = 1) AND auditstate != 3 AND p.memberid IN (?)
) t
WHERE p.custid = c.custid
AND p.applytype = 0
AND p.createtime BETWEEN to_date(?, 'yyyy-mm-dd') AND to_date(?, 'yyyy-mm-dd hh24:mi:ss')
AND (p.auditstate = ?
AND p.executestate = 1)
AND auditstate != 3
AND p.memberid IN (?)
) t
WHERE t.cnt < ?
) k
) k
WHERE k.cnt > ?
ORDER BY memberid ASC, createtime DESC;
ORDER BY memberid ASC, createtime DESC
+6 -3
View File
@@ -8,7 +8,10 @@ ORDER BY e.word_alias,a.createtime DESC
---------------------------
SELECT /*+use_hash(a b e) index(e)*/ Count(*)
SELECT /*+ use_hash(a b e) index(e)*/ Count(*)
FROM bbbb a, aaaa b, q_keyword e, CCCC f
WHERE a.offerid = b.offerid AND a.keywordid = e.keywordid AND a.offerid = f.offerid AND a.issuspect = '1'
ORDER BY e.word_alias, a.createtime DESC;
WHERE a.offerid = b.offerid
AND a.keywordid = e.keywordid
AND a.offerid = f.offerid
AND a.issuspect = '1'
ORDER BY e.word_alias, a.createtime DESC
+9 -6
View File
@@ -11,12 +11,15 @@ where rownum < ? ) where rnm >= ?
---------------------------
SELECT *
FROM (SELECT rownum AS rnm, z.*
FROM (SELECT name AS value, value AS KEY
FROM (
SELECT rownum AS rnm, z.*
FROM (
SELECT name AS value, value AS key
FROM a_b_c
WHERE is_deleted = 'n' AND type = 'fuse'
WHERE is_deleted = 'n'
AND type = 'fuse'
ORDER BY ordering
) z
) z
WHERE rownum < ?
)
WHERE rnm >= ?;
)
WHERE rnm >= ?
+4 -3
View File
@@ -2,7 +2,8 @@ SELECT employee_id FROM (SELECT employee_id+1 AS employee_id FROM employees)
FOR UPDATE;
---------------------------
SELECT employee_id
FROM (SELECT employee_id + 1 AS employee_id
FROM (
SELECT employee_id + 1 AS employee_id
FROM employees
)
FOR UPDATE;
)
FOR UPDATE;
+5 -2
View File
@@ -12,5 +12,8 @@ ORDER BY EE_2.NAME,AA_2.id NULLS LAST
---------------------------
SELECT A_B_C.*, EE_2.NAME AS TRUNK_NAME
FROM AA_2, A_B_C, EE_2
WHERE AA_2.is_deleted = 'n' AND AA_2.TRUNK_ID = EE_2.ID AND AA_2.ID = A_B_C.CLOT_ID AND A_B_C.GMT_MODIFIED >= ?
ORDER BY EE_2.NAME, AA_2.id NULLS LAST;
WHERE AA_2.is_deleted = 'n'
AND AA_2.TRUNK_ID = EE_2.ID
AND AA_2.ID = A_B_C.CLOT_ID
AND A_B_C.GMT_MODIFIED >= ?
ORDER BY EE_2.NAME, AA_2.id NULLS LAST
+12 -8
View File
@@ -17,16 +17,20 @@ select * from (
---------------------------
SELECT *
FROM (SELECT rownum AS rnm, z.*
FROM (SELECT DISTINCT tt.id AS use_less_id, tt.*
FROM (SELECT t.*, rct.parent_id, RCT.NAME AS trunk_name
FROM (
SELECT rownum AS rnm, z.*
FROM (
SELECT DISTINCT tt.id AS use_less_id, tt.*
FROM (
SELECT t.*, rct.parent_id, RCT.NAME AS trunk_name
FROM x_1_2 t, k_2_3 rct
WHERE t.is_deleted = 'n' AND t.trunk_id = rct.id
) tt
WHERE t.is_deleted = 'n'
AND t.trunk_id = rct.id
) tt
START WITH trunk_name = 'rc.mf.Caesar'
CONNECT BY PRIOR parent_id = trunk_id
ORDER BY load_order NULLS LAST
) z
) z
WHERE rownum < ?
)
WHERE rnm >= ?;
)
WHERE rnm >= ?
+17 -11
View File
@@ -24,20 +24,26 @@ where rnm >= ?
---------------------------
SELECT *
FROM (SELECT rownum AS rnm, z.*
FROM (SELECT *
FROM (SELECT DISTINCT *
FROM (SELECT lower(a.role_name) || '#' || a.permission_id AS KEY, 'y' AS value
FROM (
SELECT rownum AS rnm, z.*
FROM (
SELECT *
FROM (
SELECT DISTINCT *
FROM (
SELECT lower(a.role_name) || '#' || a.permission_id AS key, 'y' AS value
FROM f_p_23 A
WHERE a.is_deleted = 'n'
UNION ALL
SELECT lower(b.role_name) || '#' || a.permission_id, 'y'
FROM f_p_23 A, app_role_base_role B
WHERE a.is_deleted = 'n' AND b.is_deleted = 'n' AND a.role_name = b.base_role_name
)
) c
ORDER BY c.KEY
) z
WHERE a.is_deleted = 'n'
AND b.is_deleted = 'n'
AND a.role_name = b.base_role_name
)
) c
ORDER BY c.key
) z
WHERE rownum < ?
)
WHERE rnm >= ?;
)
WHERE rnm >= ?
+9 -4
View File
@@ -10,9 +10,14 @@ from (
---------------------------
SELECT nodeId, nodeName, taskflowName, taskflowVersion
FROM (SELECT /*+use_hash(n f) ordered*/ n.ID AS nodeId, n.name AS nodeName, f.name AS taskflowName, f.version AS taskflowVersion
FROM (
SELECT /*+ use_hash(n f) ordered */ n.ID AS nodeId, n.name AS nodeName, f.name AS taskflowName, f.version AS taskflowVersion
FROM "AB" n, "BC_3" f
WHERE n.owner = ? AND (n.STATUS IN (?) AND n.GMT_MODIFIED < ? AND n.IS_AUTO = 'Y' AND n.task_flow_id = f.id)
WHERE n.owner = ?
AND n.STATUS IN (?)
AND n.GMT_MODIFIED < ?
AND n.IS_AUTO = 'Y'
AND n.task_flow_id = f.id
ORDER BY f.priority DESC NULLS LAST, f.gmt_create ASC
)
WHERE rownum < ?;
)
WHERE rownum < ?
+13 -6
View File
@@ -15,10 +15,17 @@ where xh=1
---------------------------
SELECT INDUSTRY_ID, sale_type, service_type, RISK_TYPE, to_char(gmt_create, 'yyyy-mm-dd hh24:mi:ss') AS gmt_create
FROM (SELECT /*+use_hash(a b c) ordered*/ b.service_type, b.RISK_TYPE, b.sale_type, b.INDUSTRY_ID, b.GMT_CREATE
, row_number() OVER (PARTITION BY (b.service_type, b.RISK_TYPE, b.sale_type, b.INDUSTRY_ID) ORDER BY b.GMT_CREATE) AS xh
SELECT INDUSTRY_ID, sale_type, service_type, RISK_TYPE
, to_char(gmt_create, 'yyyy-mm-dd hh24:mi:ss') AS gmt_create
FROM (
SELECT /*+ use_hash(a b c) ordered */ b.service_type, b.RISK_TYPE, b.sale_type, b.INDUSTRY_ID, b.GMT_CREATE
, row_number() OVER (PARTITION BY b.service_type, b.RISK_TYPE, b.sale_type, b.INDUSTRY_ID ORDER BY b.GMT_CREATE) AS xh
FROM "AAAAA" a, "F" b, "BBBBB" c
WHERE a.id = b.task_flow_id AND a.id = c.task_flow_id AND c.status = 'waiting' AND c.IS_AUTO = 'N' AND a.status = 'running' AND c.name IN (?)
)
WHERE xh = 1;
WHERE a.id = b.task_flow_id
AND a.id = c.task_flow_id
AND c.status = 'waiting'
AND c.IS_AUTO = 'N'
AND a.status = 'running'
AND c.name IN (?)
)
WHERE xh = 1
+23 -12
View File
@@ -46,26 +46,37 @@ where rownum_ >= ?
---------------------------
SELECT *
FROM (SELECT row_.*, rownum AS rownum_
FROM (SELECT *
FROM (SELECT results.*, row_number() OVER (PARTITION BY (results.object_id) ORDER BY results.gmt_modified DESC) AS rn
FROM (SELECT sus.ID AS ID, sus.GMT_CREATE AS GMT_CREATE, sus.GMT_MODIFIED AS GMT_MODIFIED, sus.COMPANY_ID AS COMPANY_ID, sus.OBJECT_ID AS OBJECT_ID
FROM (
SELECT row_.*, rownum AS rownum_
FROM (
SELECT *
FROM (
SELECT results.*, row_number() OVER (PARTITION BY results.object_id ORDER BY results.gmt_modified DESC) AS rn
FROM (
SELECT sus.ID AS ID, sus.GMT_CREATE AS GMT_CREATE, sus.GMT_MODIFIED AS GMT_MODIFIED, sus.COMPANY_ID AS COMPANY_ID, sus.OBJECT_ID AS OBJECT_ID
, sus.OBJECT_TYPE AS OBJECT_TYPE, sus.CONFIRM_TYPE AS CONFIRM_TYPE, sus.OPERATOR AS OPERATOR, sus.FILTER_TYPE AS FILTER_TYPE, sus.MEMBER_ID AS MEMBER_ID
, sus.MEMBER_FUC_Q AS MEMBER_FUC_Q, sus.RISK_TYPE AS RISK_TYPE, 'Y' AS IS_DRAFT
FROM f_U_c_ sus, a_b_c_draft p, member m
WHERE 1 = 1 AND p.company_id = m.company_id AND m.login_id = ? AND (p.sale_type IN (?) AND p.id = sus.object_id)
WHERE 1 = 1
AND p.company_id = m.company_id
AND m.login_id = ?
AND p.sale_type IN (?)
AND p.id = sus.object_id
UNION
SELECT sus.ID AS ID, sus.GMT_CREATE AS GMT_CREATE, sus.GMT_MODIFIED AS GMT_MODIFIED, sus.COMPANY_ID AS COMPANY_ID, sus.OBJECT_ID AS OBJECT_ID
, sus.OBJECT_TYPE AS OBJECT_TYPE, sus.CONFIRM_TYPE AS CONFIRM_TYPE, sus.OPERATOR AS OPERATOR, sus.FILTER_TYPE AS FILTER_TYPE, sus.MEMBER_ID AS MEMBER_ID
, sus.MEMBER_FUC_Q AS MEMBER_FUC_Q, sus.RISK_TYPE AS RISK_TYPE, 'N' AS IS_DRAFT
FROM f_U_c_ sus, a_b_c p, member m
WHERE 1 = 1 AND p.company_id = m.company_id AND m.login_id = ? AND (p.sale_type IN (?) AND p.id = sus.object_id)
) results
)
WHERE 1 = 1
AND p.company_id = m.company_id
AND m.login_id = ?
AND p.sale_type IN (?)
AND p.id = sus.object_id
) results
)
WHERE rn = 1
ORDER BY gmt_modified DESC
) row_
) row_
WHERE rownum <= ?
)
WHERE rownum_ >= ?;
)
WHERE rownum_ >= ?
+9 -6
View File
@@ -12,12 +12,15 @@ from (
---------------------------
SELECT *
FROM (SELECT rownum AS rnm, z.*
FROM (SELECT name AS KEY, value
FROM (
SELECT rownum AS rnm, z.*
FROM (
SELECT name AS KEY, value
FROM ccccc t
WHERE t.type = 'VODKA._CTPCLEAN_NIRVANA_URL' AND is_deleted = 'n'
WHERE t.type = 'VODKA._CTPCLEAN_NIRVANA_URL'
AND is_deleted = 'n'
ORDER BY id
) z
) z
WHERE rownum < ?
)
WHERE rnm >= ?;
)
WHERE rnm >= ?
+5 -4
View File
@@ -7,8 +7,9 @@ group by bk.attr_id;
---------------------------
SELECT bk.attr_id AS attrId, group_concat(DISTINCT(bk.value_id)) AS attrValueStr, group_concat(DISTINCT(pt.name)) AS themeNameStr
FROM a_c_ pt LEFT JOIN cde_f bk ON pt.spu_id = bk.spu_id
WHERE pt.status = 'action' AND pt.category_id = ?
SELECT bk.attr_id AS attrId, group_concat(DISTINCT bk.value_id) AS attrValueStr, group_concat(DISTINCT pt.name) AS themeNameStr
FROM a_c_ pt
LEFT JOIN cde_f bk ON pt.spu_id = bk.spu_id
WHERE pt.status = 'action'
AND pt.category_id = ?
GROUP BY bk.attr_id;
+7 -1
View File
@@ -11,6 +11,12 @@ OR operator = ?
---------------------------
SELECT count(*)
FROM CREDIT_CMT_APPLY, A_B_C
WHERE 1 = 2 OR operator = ? AND CREDIT_CMT_APPLY.GMT_CREATE >= ? AND CREDIT_CMT_APPLY.GMT_CREATE <= ? AND CREDIT_CMT_APPLY.ID = A_B_C.cmt_apply_id AND Type = 'denounce' AND SHEET_STATUS = 'assigned_unresolved';
WHERE 1 = 2
OR operator = ?
AND CREDIT_CMT_APPLY.GMT_CREATE >= ?
AND CREDIT_CMT_APPLY.GMT_CREATE <= ?
AND CREDIT_CMT_APPLY.ID = A_B_C.cmt_apply_id
AND Type = 'denounce'
AND SHEET_STATUS = 'assigned_unresolved'
+6 -8
View File
@@ -18,21 +18,19 @@ ORDER BY order1;
---------------------------
WITH
org_chart (eid, emp_last, mgr_id, reportLevel, salary, job_id)
AS
(
WITH org_chart (eid, emp_last, mgr_id, reportLevel, salary, job_id) AS (
SELECT employee_id, last_name, manager_id, 0 AS reportLevel, salary
, job_id
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id, r.reportLevel + 1 AS reportLevel, e.salary
, e.job_id
SELECT e.employee_id, e.last_name, e.manager_id, r.reportLevel + 1 AS reportLevel
, e.salary, e.job_id
FROM org_chart r, employees e
WHERE r.eid = e.manager_id
)
SEARCH DEPTH FIRST BY emp_last SET order1
SELECT lpad(' ', 2 * reportLevel) || emp_last AS emp_name, eid, mgr_id, salary, job_id
SELECT lpad(' ', 2 * reportLevel) || emp_last AS emp_name
, eid, mgr_id, salary, job_id
FROM org_chart
ORDER BY order1;
ORDER BY order1;
+3 -2
View File
@@ -2,7 +2,8 @@ SELECT employee_id FROM (SELECT employee_id+1 AS employee_id FROM employees)
FOR UPDATE;
---------------------------
SELECT employee_id
FROM (SELECT employee_id + 1 AS employee_id
FROM (
SELECT employee_id + 1 AS employee_id
FROM employees
)
)
FOR UPDATE;
+5 -8
View File
@@ -19,23 +19,20 @@ ORDER BY order1;
---------------------------
WITH
dup_hiredate (eid, emp_last, mgr_id, reportLevel, hire_date, job_id)
AS
(
WITH dup_hiredate (eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS (
SELECT employee_id, last_name, manager_id, 0 AS reportLevel, hire_date
, job_id
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id, r.reportLevel + 1 AS reportLevel, e.hire_date
, e.job_id
SELECT e.employee_id, e.last_name, e.manager_id, r.reportLevel + 1 AS reportLevel
, e.hire_date, e.job_id
FROM dup_hiredate r, employees e
WHERE r.eid = e.manager_id
)
SEARCH DEPTH FIRST BY hire_date SET order1
CYCLE hire_date SET is_cycle TO 'Y' DEFAULT 'N'
SELECT lpad(' ', 2 * reportLevel) || emp_last AS emp_name, eid, mgr_id, hire_date, job_id
, is_cycle
SELECT lpad(' ', 2 * reportLevel) || emp_last AS emp_name
, eid, mgr_id, hire_date, job_id, is_cycle
FROM dup_hiredate
ORDER BY order1;
+4 -4
View File
@@ -6,8 +6,8 @@ PIVOT
---------------------------
SELECT *
FROM (SELECT EXTRACT(YEAR FROM order_date) AS year, order_mode, order_total
FROM (
SELECT EXTRACT(YEAR FROM order_date) AS year, order_mode, order_total
FROM orders
)
PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));
)
PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));
+1 -1
View File
@@ -7,6 +7,6 @@ SELECT * FROM pivot_table
---------------------------
SELECT *
FROM pivot_table
UNPIVOT (yearly_total FOR order_mode IN (store AS 'direct', internet AS 'online'))
UNPIVOT (yearly_total FOR order_mode IN (store AS "direct", internet AS "online"))
ORDER BY year, order_mode;
+2 -2
View File
@@ -7,5 +7,5 @@ SELECT * FROM pivot_table
---------------------------
SELECT *
FROM pivot_table
UNPIVOT INCLUDE NULLS (yearly_total FOR order_mode IN (store AS 'direct', internet AS 'online'))
ORDER BY year, order_mode;
UNPIVOT INCLUDE NULLS (yearly_total FOR order_mode IN (store AS "direct", internet AS "online"))
ORDER BY year, order_mode;
+2 -1
View File
@@ -8,5 +8,6 @@ SELECT last_name, job_id, departments.department_id, department_name
---------------------------
SELECT last_name, job_id, departments.department_id, department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id AND job_id = 'SA_MAN'
WHERE employees.department_id = departments.department_id
AND job_id = 'SA_MAN'
ORDER BY last_name;
+2 -2
View File
@@ -1,6 +1,6 @@
SELECT 25, +6.34, 0.5, 25e-03, -1, 25f, +6.34F, 0.5d, -1D
FROM DUAL
---------------------------
SELECT 25, 6.34, 0.5, 0.025, -1
SELECT 25, 6.34, 0.5, 25e-03, -1
, 25.0F, 6.34F, 0.5D, -1.0D
FROM DUAL;
FROM DUAL
+1 -1
View File
@@ -4,4 +4,4 @@ SELECT employee_id, manager_id
---------------------------
SELECT employee_id, manager_id
FROM employees
WHERE manager_id(+) = employees.employee_id;
WHERE employees.manager_id(+) = employees.employee_id;
+4 -2
View File
@@ -6,7 +6,9 @@ SELECT * FROM employees
---------------------------
SELECT *
FROM employees
WHERE department_id NOT IN (SELECT department_id
WHERE department_id NOT IN (
SELECT department_id
FROM departments
WHERE location_id = 1700)
WHERE location_id = 1700
)
ORDER BY last_name;
+1 -1
View File
@@ -10,4 +10,4 @@ FROM hr_info t1, TABLE(CAST(MULTISET((
SELECT t3.last_name, t3.department_id, t3.salary
FROM people t3
WHERE t3.department_id = t1.department_id
)) AS people_tab_typ)) t2;
)) AS people_tab_typ)) t2;
+5 -3
View File
@@ -10,10 +10,12 @@ FROM
ORDER BY a.department_id;
---------------------------
SELECT a.department_id AS "Department", a.num_emp / b.total_count AS "%_Employees", a.sal_sum / b.total_sal AS "%_Salary"
FROM (SELECT department_id, COUNT(*) AS num_emp, SUM(salary) AS sal_sum
FROM (
SELECT department_id, COUNT(*) AS num_emp, SUM(salary) AS sal_sum
FROM employees
GROUP BY department_id
) a, (SELECT COUNT(*) AS total_count, SUM(salary) AS total_sal
) a, (
SELECT COUNT(*) AS total_count, SUM(salary) AS total_sal
FROM employees
) b
) b
ORDER BY a.department_id;
+2 -1
View File
@@ -4,7 +4,8 @@ SELECT LPAD(' ',2*(LEVEL-1)) || last_name org_chart,
START WITH job_id = 'AD_VP'
CONNECT BY PRIOR employee_id = manager_id;
---------------------------
SELECT LPAD(' ', 2 * (LEVEL - 1)) || last_name AS org_chart, employee_id, manager_id, job_id
SELECT LPAD(' ', 2 * (LEVEL - 1)) || last_name AS org_chart
, employee_id, manager_id, job_id
FROM employees
START WITH job_id = 'AD_VP'
CONNECT BY PRIOR employee_id = manager_id;
+2 -1
View File
@@ -5,7 +5,8 @@ SELECT LPAD(' ',2*(LEVEL-1)) || last_name org_chart,
START WITH job_id = 'AD_VP'
CONNECT BY PRIOR employee_id = manager_id;
---------------------------
SELECT LPAD(' ', 2 * (LEVEL - 1)) || last_name AS org_chart, employee_id, manager_id, job_id
SELECT LPAD(' ', 2 * (LEVEL - 1)) || last_name AS org_chart
, employee_id, manager_id, job_id
FROM employees
WHERE job_id != 'FI_MGR'
START WITH job_id = 'AD_VP'
+3 -3
View File
@@ -7,9 +7,9 @@ SELECT e1.last_name FROM employees e1
---------------------------
SELECT e1.last_name
FROM employees e1
WHERE f(CURSOR((
WHERE f(CURSOR(
SELECT e2.hire_date
FROM employees e2
WHERE e1.employee_id = e2.manager_id
)), e1.hire_date) = 1
ORDER BY last_name;
), e1.hire_date) = 1
ORDER BY last_name;
File diff suppressed because one or more lines are too long
+9 -10
View File
@@ -61,21 +61,20 @@ END;
---------------------------
DROP TABLE employees_temp;
CREATE TABLE employees_temp
AS
SELECT employee_id, first_name, last_name
FROM employees;
AS
SELECT employee_id, first_name, last_name
FROM employees;
DROP TABLE employees_temp2;
CREATE TABLE employees_temp2
AS
SELECT employee_id, first_name, last_name
FROM employees;
AS
SELECT employee_id, first_name, last_name
FROM employees;
DECLARE
seq_value NUMBER
seq_value NUMBER;
BEGIN
seq_value := employees_seq.NEXTVAL;
DBMS_OUTPUT.PUT_LINE('Initial sequence value: ' || TO_CHAR(seq_value));
INSERT INTO employees_temp
(employee_id, first_name, last_name)
INSERT INTO employees_temp (employee_id, first_name, last_name)
VALUES (employees_seq.NEXTVAL, 'Lynette', 'Smith');
INSERT INTO employees_temp2
VALUES (employees_seq.CURRVAL, 'Morgan', 'Smith');
@@ -85,7 +84,7 @@ BEGIN
UPDATE employees_temp
SET employee_id = employees_seq.NEXTVAL
WHERE first_name = 'Lynette'
AND last_name = 'Smith';
AND last_name = 'Smith';
seq_value := employees_seq.CURRVAL;
DBMS_OUTPUT.PUT_LINE('Ending sequence value: ' || TO_CHAR(seq_value));
END;
@@ -0,0 +1,10 @@
SELECT empno,
deptno,
sal,
FIRST_VALUE(sal) IGNORE NULLS
OVER (PARTITION BY deptno ORDER BY sal) AS lowest_in_dept
FROM emp;
---------------------------
SELECT empno, deptno, sal
, FIRST_VALUE(sal) IGNORE NULLS OVER (PARTITION BY deptno ORDER BY sal) AS lowest_in_dept
FROM emp;