Use case - CAST app
Introduction
The comparison has been done between PL/SQL Analyzer 8.3.8 and SQL Analyzer 3.4.0-beta3 (AIP 8.3.8 + datacolumnaccess 1.0.0-beta2), on the attached source code. CAST triplet is an use case 100% SQL, based on CAIP 8.2.16 SQL sources, and it was selected to make a focus on performance.
Execution time
| PL/SQL Analyzer | SQL Analyzer |
|---|---|
Status: Execution succeeded Start: Fri Jun 21 11:37:56 CEST 2019
|
Status: Execution succeeded Start: Tue Jan 21 16:42:13 CET 2020
|
TQI
| analyzer | tqi |
|---|---|
| SQL | 2.49159947935289 |
| Oracle | 2.40230552230396 |
Number of data functions and transaction entry points per APPLICATION
| analyzer | cnt_datafunctions | cntdfp_functionpoints | cntdf_calibratedfunctionpoints | cnt_transactions | cnttfp_functionpoints | cntt_calibratedfunctionpoints |
|---|---|---|---|---|---|---|
| SQL | 1609 | 10013 | 10013 | 0 | 0 | 0 |
| Oracle | 1602 | 9924 | 9924 | 0 | 0 | 0 |
Number of objects by type
| objecttype | numberofobjects | Compared with Oracle |
|---|---|---|
| Column | 9129 | = |
| Function | 2812 | = |
| Indexes Primary Keys Unique Constraints | 1543 | -44 Duplicated PKs in Oracle |
| Package | 6 | = |
| Procedure | 157 | = |
| Schema | 4 | = |
| Synonym | 10 | = |
| Table | 1692 | = |
| Trigger | 4 | = |
| View | 113 | = |
| Check Constraint | 4782 | Object type not implemented on SQL |
| Instance | 1 | Object type not implemented on SQL |
| Sequence | 29 | Object type not implemented on SQL |
Compare links by type
| kindoflink | callertype | calleetype | Compared with Oracle |
|---|---|---|---|
| ACCESS | Function | Column | 8 *) |
| ACCESS | Function | Table | Detected only by PL/SQL Analyzer |
| ACCESS | Procedure | Column | -14 |
| ACCESS | View | Column | -14 |
| CALL | Function | Function | -18 |
| CALL | Function | Procedure | = |
| CALL | Function | Trigger | Detected only by SQL Analyzer |
| CALL | Procedure | Function | 4 *) |
| CALL | Procedure | Procedure | = |
| CALL | Procedure | Trigger | Detected only by SQL Analyzer |
| CALL | View | Function | = |
| USE | Function | Synonym | Detected only by SQL Analyzer |
| USE | Function | Table | 104 *) |
| USE | Function | View | = |
| USE | Procedure | Synonym | Detected only by SQL Analyzer |
| USE | Procedure | Table | 30 *) |
| USE | Procedure | View | = |
| USE | Trigger | Synonym | Detected only by SQL Analyzer |
| USE | View | Synonym | Detected only by SQL Analyzer |
| USE | View | Table | = |
| USE | View | View | = |
*) We detect more than Oracle Analyzer
Compare equivalent quality rules
| qualityrulename | objecttype | Compared with Oracle |
|---|---|---|
| Always define column names when inserting values | Function | Exists only on SQL Analyzer |
| Always define column names when inserting values | Procedure | Exists only on SQL Analyzer |
| Average Coupling Artifacts | Function | 3 |
| Average Coupling Artifacts | Procedure | = |
| Average Coupling Artifacts | View | = |
| Average Reuse by Call | Function | -5 |
| Average Reuse by Call | Procedure | -3 |
| Average Reuse by Call | Trigger | -3 |
| Average Reuse by Call | View | = |
| Average Size Artifacts | Function | -682 |
| Average Size Artifacts | Procedure | Detected only by PL/SQL Analyzer |
| Average Size Artifacts | View | Detected only by PL/SQL Analyzer |
| Avoid SELECT *" queries" | Function | -12 |
| Avoid SELECT *" queries" | Procedure | -2 |
| Avoid Artifacts with High Cyclomatic Complexity | Function | -32 |
| Avoid Artifacts with High Cyclomatic Complexity | Procedure | -4 |
| Avoid Artifacts with High Depth of Code | Function | -3 |
| Avoid Artifacts with High Depth of Nested Subqueries | Function | Detected only by SQL Analyzer |
| Avoid Artifacts with High Depth of Nested Subqueries | Procedure | Detected only by SQL Analyzer |
| Avoid Artifacts with High Depth of Nested Subqueries | View | Detected only by SQL Analyzer |
| Avoid Artifacts with High Essential Complexity | Function | 610 |
| Avoid Artifacts with High Essential Complexity | Procedure | 20 |
| Avoid Artifacts with High Essential Complexity | View | Detected only by SQL Analyzer |
| Avoid Artifacts with High Fan-In | Function | = |
| Avoid Artifacts with High Fan-In | Procedure | = |
| Avoid Artifacts with High Fan-In | Trigger | Detected only by SQL Analyzer |
| Avoid Artifacts with High Fan-In | View | = |
| Avoid Artifacts with High Fan-Out | Function | -4 |
| Avoid Artifacts with High Fan-Out | Procedure | = |
| Avoid Artifacts with High Integration Complexity | Function | 36 |
| Avoid Artifacts with High Integration Complexity | Procedure | -2 |
| Avoid Artifacts with High RAW SQL Complexity | Function | Detected only by PL/SQL Analyzer |
| Avoid Artifacts with High RAW SQL Complexity | Procedure | Detected only by PL/SQL Analyzer |
| Avoid Artifacts with SQL statement including subqueries | Function | -345 |
| Avoid Artifacts with SQL statement including subqueries | Procedure | -23 |
| Avoid Artifacts with SQL statement including subqueries | View | = |
| Avoid Artifacts with a Complex SELECT Clause | Function | The rationale describe a client server context, there is no value to apply-it on SQL code |
| Avoid Artifacts with a Complex SELECT Clause | Procedure | The rationale describe a client server context, there is no value to apply-it on SQL code |
| Avoid Artifacts with high Commented-out Code Lines/Code Lines ratio | Function | -114 |
| Avoid Artifacts with high Commented-out Code Lines/Code Lines ratio | Procedure | 2 |
| Avoid Artifacts with high Commented-out Code Lines/Code Lines ratio | View | Detected only by PL/SQL Analyzer |
| Avoid Artifacts with lines longer than X characters | Function | -185 |
| Avoid Artifacts with lines longer than X characters | Procedure | -7 |
| Avoid Artifacts with lines longer than X characters | View | -5 |
| Avoid Artifacts with queries on too many Tables and/or Views | Function | -1 |
| Avoid Artifacts with queries on too many Tables and/or Views | Procedure | -1 |
| Avoid Artifacts with queries on too many Tables and/or Views | View | Detected only by SQL Analyzer |
| Avoid Artifacts with too many parameters | Function | 6 |
| Avoid Cursors inside a loop | Function | -7 |
| Avoid SQL queries with implicit conversions in the WHERE clause | Function | Exists only on PL/SQL Analyzer |
| Avoid SQL queries with implicit conversions in the WHERE clause | Procedure | Exists only on PL/SQL Analyzer |
| Avoid SQL queries with implicit conversions in the WHERE clause | View | Exists only on PL/SQL Analyzer |
| Avoid Tables not using referential integrity | Table | = |
| Avoid Tables with more than 20 columns on an OLTP system | Table | = |
| Avoid Tables without Primary Key | Table | = |
| Avoid Too Many Copy Pasted Artifacts | Function | 342 |
| Avoid Too Many Copy Pasted Artifacts | Procedure | -17 |
| Avoid Too Many Copy Pasted Artifacts | View | 1 |
| Avoid artifacts having recursive calls | Function | 2 |
| Avoid artifacts having recursive calls | Procedure | = |
| Avoid empty catch blocks | Function | Exists only on SQL Analyzer |
| Avoid empty catch blocks | SQL Analyzer Project | Exists only on SQL Analyzer |
| Avoid empty catch blocks | Trigger | Exists only on SQL Analyzer |
| Avoid empty catch blocks | Universal Project | Exists only on SQL Analyzer |
| Avoid exists and not exists independent clauses | Function | Detected only by SQL Analyzer |
| Avoid exists and not exists independent clauses | Procedure | Detected only by SQL Analyzer |
| Avoid explicit comparison with NULL | Function | Exists only on SQL Analyzer |
| Avoid having multiple Artifacts inserting data on the same SQL Table | Table | 683 |
| Avoid having multiple Artifacts updating data on the same SQL Table | Table | 29 |
| Avoid having multiple artifacts deleting data on the same SQL table | Table | 2302 |
| Avoid large Artifacts - too many Lines of Code | Function | = |
| Avoid large Artifacts - too many Lines of Code | Procedure | = |
| Avoid large Artifacts - too many Lines of Code | View | 1 |
| Avoid large Tables - too many columns | Table | = |
| Avoid long Table or View names | Table | = |
| Avoid long Table or View names | View | = |
| Avoid non-SARGable queries | Function | Exists only on SQL Analyzer |
| Avoid non-SARGable queries | Procedure | Exists only on SQL Analyzer |
| Avoid non-SARGable queries | View | Exists only on SQL Analyzer |
| Avoid non-indexed SQL queries | Function | = |
| Avoid non-indexed SQL queries | Procedure | 32 |
| Avoid non-indexed SQL queries | View | 9 |
| Avoid orphaned synonyms | Synonym | = |
| Avoid queries using old style join convention instead of ANSI-Standard joins | Function | 1 |
| Avoid queries using old style join convention instead of ANSI-Standard joins | Procedure | = |
| Avoid queries using old style join convention instead of ANSI-Standard joins | View | = |
| Avoid redundant indexes | Table | 2 |
| Avoid too many Indexes on one Table | Table | = |
| Avoid triggers, functions and procedures with a very low comment/code ratio | Function | 95 |
| Avoid triggers, functions and procedures with a very low comment/code ratio | Procedure | 4 |
| Avoid triggers, functions and procedures with a very low comment/code ratio | Trigger | = |
| Avoid undocumented Triggers, Functions and Procedures | Function | = |
| Avoid undocumented Triggers, Functions and Procedures | Procedure | = |
| Avoid undocumented Triggers, Functions and Procedures | Trigger | = |
| Avoid unreferenced Functions | Function | -1 |
| Avoid unreferenced Functions | Procedure | = |
| Avoid unreferenced Tables | Table | -11 |
| Avoid unreferenced views | View | = |
| Avoid using nullable" Columns except in the last position in a Table" | Table | Exists only on PL/SQL Analyzer |
| Avoid using GOTO statement | Function | = |
| Avoid using GOTO statement | Procedure | = |
| Avoid using SQL queries inside a loop | Function | 3 |
| Avoid using SQL queries inside a loop | Procedure | = |
| Avoid using dynamic SQL in SQL Artifacts | Function | = |
| Avoid using dynamic SQL in SQL Artifacts | Procedure | = |
| Avoid using the GROUP BY clause | Function | -2 |
| Avoid using the GROUP BY clause | Procedure | = |
| Column references should be qualified | Function | Exists only on SQL Analyzer |
| Column references should be qualified | Procedure | Exists only on SQL Analyzer |
| Column references should be qualified | View | Exists only on SQL Analyzer |
| Cyclomatic Complexity Distribution | Function | -335 |
| Cyclomatic Complexity Distribution | Procedure | 2 |
| Cyclomatic Complexity Distribution | Trigger | = |
| Cyclomatic Complexity Distribution | View | Detected only by SQL Analyzer |
| DISTINCT should not be used in SQL SELECT statements | Function | Exists only on SQL Analyzer |
| DISTINCT should not be used in SQL SELECT statements | Procedure | Exists only on SQL Analyzer |
| DISTINCT should not be used in SQL SELECT statements | View | Exists only on SQL Analyzer |
| Do not mix ANSI and non-ANSI JOIN syntax in the same query | Function | -42 |
| Do not mix ANSI and non-ANSI JOIN syntax in the same query | Procedure | Detected only by PL/SQL Analyzer |
| Do not mix ANSI and non-ANSI JOIN syntax in the same query | View | = |
| High Complexity Artifacts | Function | -32 |
| High Complexity Artifacts | Procedure | -2 |
| High Coupling Artifacts | Function | 1 |
| High Coupling Artifacts | Procedure | Detected only by SQL Analyzer |
| High Coupling Artifacts | Trigger | Detected only by SQL Analyzer |
| High Coupling Artifacts | View | = |
| High Reuse by Call | Function | 1 |
| High Reuse by Call | Procedure | = |
| High Reuse by Call | Trigger | Detected only by SQL Analyzer |
| High Reuse by Call | View | = |
| High SQL Complexity Artifacts | Function | Detected only by PL/SQL Analyzer |
| High SQL Complexity Artifacts | Procedure | Detected only by PL/SQL Analyzer |
| LIKE operator should not start with a wildcard character | Function | Exists only on SQL Analyzer |
| LIKE operator should not start with a wildcard character | View | Exists only on SQL Analyzer |
| Large Size Artifacts | Function | Detected only by PL/SQL Analyzer |
| Large Size Artifacts | Procedure | Detected only by PL/SQL Analyzer |
| Low Complexity Artifacts | Function | 375 |
| Low Complexity Artifacts | Procedure | 2 |
| Low Complexity Artifacts | View | Detected only by SQL Analyzer |
| Low Coupling Artifacts | Function | 1 |
| Low Coupling Artifacts | Procedure | = |
| Low Coupling Artifacts | Trigger | Detected only by SQL Analyzer |
| Low Coupling Artifacts | View | = |
| Low SQL Complexity Artifacts | Function | 491 |
| Low SQL Complexity Artifacts | Procedure | -14 |
| Low SQL Complexity Artifacts | View | 2 |
| Moderate Complexity Artifacts | Function | -8 |
| Moderate Complexity Artifacts | Procedure | Detected only by PL/SQL Analyzer |
| Moderate SQL Complexity Artifacts | Function | Detected only by PL/SQL Analyzer |
| Moderate SQL Complexity Artifacts | Procedure | Detected only by PL/SQL Analyzer |
| Moderate SQL Complexity Artifacts | View | Detected only by PL/SQL Analyzer |
| Never use SQL queries with a cartesian product | Function | -5 |
| Never use SQL queries with a cartesian product | View | -1 |
| Never use WHEN OTHER THEN NULL | Function | Exists only on SQL Analyzer |
| Number of Code Lines | Function | = |
| Number of Code Lines | Procedure | = |
| Number of Code Lines | Trigger | = |
| Number of Code Lines | View | = |
| Number of Datablocks | Function | = |
| Number of Datablocks | Procedure | = |
| Number of Forms | Function | = |
| Number of Forms | Procedure | = |
| Number of Forms | Trigger | = |
| Number of Forms | View | = |
| Number of Functions | Table | = |
| Number of Tables | View | = |
| Number of Views | Trigger | = |
| Prefer PRIVATE to PUBLIC synonym | Synonym | = |
| Prefer UNION ALL to UNION | Function | -2 |
| Prefer UNION ALL to UNION | Procedure | = |
| Prefer UNION ALL to UNION | View | = |
| Replace OR conditions testing equality on the same identifier in SQL WHERE clauses by an IN test condition | Function | Detected only by SQL Analyzer |
| Replace OR conditions testing equality on the same identifier in SQL WHERE clauses by an IN test condition | Procedure | Detected only by SQL Analyzer |
| Reuse by Call Distribution | Function | -4 |
| Reuse by Call Distribution | Procedure | Detected only by SQL Analyzer |
| Reuse by Call Distribution | Trigger | Detected only by SQL Analyzer |
| Reuse by Call Distribution | View | = |
| SQL Complexity Distribution | Function | 327 |
| SQL Complexity Distribution | Procedure | 24 |
| SQL Complexity Distribution | Trigger | = |
| SQL Complexity Distribution | View | 23 |
| Small Size Artifacts | Function | -1849 |
| Small Size Artifacts | Procedure | -115 |
| Small Size Artifacts | Trigger | Detected only by PL/SQL Analyzer |
| Small Size Artifacts | View | -92 |
| Specify column names instead of column numbers in ORDER BY clauses | Function | Exists only on SQL Analyzer |
| Table naming convention - character set control | Table | Detected only by SQL Analyzer |
| Tables aliases should not end with a numeric suffix | Function | Exists only on SQL Analyzer |
| Tables aliases should not end with a numeric suffix | Procedure | Exists only on SQL Analyzer |
| Tables aliases should not end with a numeric suffix | View | Exists only on SQL Analyzer |
| Tables should be aliased | Function | Exists only on SQL Analyzer |
| Tables should be aliased | Procedure | Exists only on SQL Analyzer |
| Tables should be aliased | View | Exists only on SQL Analyzer |
| Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueries | Function | Exists only on SQL Analyzer |
| Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueries | Procedure | Exists only on SQL Analyzer |
| Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueries | View | Exists only on SQL Analyzer |
| Use WHEN OTHERS in exception management | Function | 338 |
| Use WHEN OTHERS in exception management | Procedure | Detected only by SQL Analyzer |
| Use WHEN OTHERS in exception management | Trigger | = |
| Use at most one statement per line | Function | -152 |
| Use at most one statement per line | Procedure | -2 |
| VARCHAR2 and NVARCHAR2 should be used | Function | 5 |
| VARCHAR2 and NVARCHAR2 should be used | Package | -2 |
| VARCHAR2 and NVARCHAR2 should be used | Procedure | 1 |
| VARCHAR2 and NVARCHAR2 should be used | Table | = |
| Very High Reuse by Call | Function | 8 |
| Very High Reuse by Call | Procedure | = |
| Very High Reuse by Call | View | = |