This documentation is not maintained. Please refer to doc.castsoftware.com/technologies to find the latest updates.

CAST

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 sources (>>). 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 performances.

You can find here bellow differences.

Execution time

PL/SQL AnalyzerSQL Analyzer

Status: Execution succeeded

Start: Fri Jun 21 11:37:56 CEST 2019
OS Version: Windows 8.1 (version 6.3)
Machine name: DOPLAP
Software Version: CAST 8.3.8 ( Build 1811 )
Task: Take a snapshot of the application
Total duration: 14m14s
Nb of Computed Quality Rules: 104


-- Statistics for application CastOnCast --
Analysis duration: 7m00s
Nb of modules: 1
Nb of active analysis units: 4
Nb of inactive analysis units: 0
Total nb of analysis units: 4
Nb of saved objects: 20359

Status: Execution succeeded

Start: Tue Jan 21 16:42:13 CET 2020
OS Version: Windows 8.1 (version 6.3)
Machine name: DOPLAP
Software Version: CAST 8.3.8 ( Build 1811 )
Task: Take a snapshot for each application
Total duration: 26m58s
Nb of Computed Quality Rules: 100


-- Statistics for application CastOnCast --
Analysis duration: 22m39s
Nb of modules: 1
Nb of active analysis units: 1
Nb of inactive analysis units: 0
Total nb of analysis units: 1
Nb of saved objects: 21910


TQI

<query>

analyzertqi
SQL2.49159947935289
Oracle2.40230552230396

Number of data functions and transaction entry points per APPLICATION

<query>

analyzercnt_datafunctionscntdfp_functionpointscntdf_calibratedfunctionpointscnt_transactionscnttfp_functionpointscntt_calibratedfunctionpoints
SQL16091001310013000
Oracle160299249924000

Number of objects by type

<query>

objecttypenumberofobjectsCompared with Oracle
Column9129=
Function2812=
Indexes Primary Keys Unique Constraints1543

-44 

Duplicated PKs in Oracle

Package6=
Procedure157=
Schema4=
Synonym10=
Table1692=
Trigger4=
View113=
Check Constraint4782Object type not implemented on SQL
Instance1Object type not implemented on SQL
Sequence29Object type not implemented on SQL

Compare links by type

<query>

kindoflinkcallertypecalleetypeCompared with Oracle
ACCESSFunctionColumn8 *)
ACCESSFunctionTableDetected only by PL/SQL Analyzer
ACCESSProcedureColumn-14
ACCESSViewColumn-14
CALLFunctionFunction-18
CALLFunctionProcedure=
CALLFunctionTriggerDetected only by SQL Analyzer
CALLProcedureFunction4 *)
CALLProcedureProcedure=
CALLProcedureTriggerDetected only by SQL Analyzer
CALLViewFunction=
USEFunctionSynonymDetected only by SQL Analyzer
USEFunctionTable104 *)
USEFunctionView=
USEProcedureSynonymDetected only by SQL Analyzer
USEProcedureTable30 *)
USEProcedureView=
USETriggerSynonymDetected only by SQL Analyzer
USEViewSynonymDetected only by SQL Analyzer
USEViewTable=
USEViewView=


*) We detect more than Oracle Analyzer

Compare equivalent quality rules

<query>

qualityrulenameobjecttypeCompared with Oracle
Always define column names when inserting valuesFunctionExists only on SQL Analyzer
Always define column names when inserting valuesProcedureExists only on SQL Analyzer
Average Coupling ArtifactsFunction3
Average Coupling ArtifactsProcedure=
Average Coupling ArtifactsView=
Average Reuse by CallFunction-5
Average Reuse by CallProcedure-3
Average Reuse by CallTrigger-3
Average Reuse by CallView=
Average Size ArtifactsFunction-682
Average Size ArtifactsProcedureDetected only by PL/SQL Analyzer
Average Size ArtifactsViewDetected only by PL/SQL Analyzer
Avoid SELECT *" queries"Function-12
Avoid SELECT *" queries"Procedure-2
Avoid Artifacts with High Cyclomatic ComplexityFunction-32
Avoid Artifacts with High Cyclomatic ComplexityProcedure-4
Avoid Artifacts with High Depth of CodeFunction-3
Avoid Artifacts with High Depth of Nested SubqueriesFunctionDetected only by SQL Analyzer
Avoid Artifacts with High Depth of Nested SubqueriesProcedureDetected only by SQL Analyzer
Avoid Artifacts with High Depth of Nested SubqueriesViewDetected only by SQL Analyzer
Avoid Artifacts with High Essential ComplexityFunction610
Avoid Artifacts with High Essential ComplexityProcedure20
Avoid Artifacts with High Essential ComplexityViewDetected only by SQL Analyzer
Avoid Artifacts with High Fan-InFunction=
Avoid Artifacts with High Fan-InProcedure=
Avoid Artifacts with High Fan-InTriggerDetected only by SQL Analyzer
Avoid Artifacts with High Fan-InView=
Avoid Artifacts with High Fan-OutFunction-4
Avoid Artifacts with High Fan-OutProcedure=
Avoid Artifacts with High Integration ComplexityFunction36
Avoid Artifacts with High Integration ComplexityProcedure-2
Avoid Artifacts with High RAW SQL ComplexityFunctionDetected only by PL/SQL Analyzer
Avoid Artifacts with High RAW SQL ComplexityProcedureDetected only by PL/SQL Analyzer
Avoid Artifacts with SQL statement including subqueriesFunction-345
Avoid Artifacts with SQL statement including subqueriesProcedure-23
Avoid Artifacts with SQL statement including subqueriesView=
Avoid Artifacts with a Complex SELECT ClauseFunctionThe rationale describe a client server context, there is no value to apply-it on SQL code
Avoid Artifacts with a Complex SELECT ClauseProcedureThe 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 ratioFunction-114
Avoid Artifacts with high Commented-out Code Lines/Code Lines ratioProcedure2
Avoid Artifacts with high Commented-out Code Lines/Code Lines ratioViewDetected only by PL/SQL Analyzer
Avoid Artifacts with lines longer than X charactersFunction-185
Avoid Artifacts with lines longer than X charactersProcedure-7
Avoid Artifacts with lines longer than X charactersView-5
Avoid Artifacts with queries on too many Tables and/or ViewsFunction-1
Avoid Artifacts with queries on too many Tables and/or ViewsProcedure-1
Avoid Artifacts with queries on too many Tables and/or ViewsViewDetected only by SQL Analyzer
Avoid Artifacts with too many parametersFunction6
Avoid Cursors inside a loopFunction-7
Avoid SQL queries with implicit conversions in the WHERE clauseFunctionExists only on PL/SQL Analyzer
Avoid SQL queries with implicit conversions in the WHERE clauseProcedureExists only on PL/SQL Analyzer
Avoid SQL queries with implicit conversions in the WHERE clauseViewExists only on PL/SQL Analyzer
Avoid Tables not using referential integrityTable=
Avoid Tables with more than 20 columns on an OLTP systemTable=
Avoid Tables without Primary KeyTable=
Avoid Too Many Copy Pasted ArtifactsFunction342
Avoid Too Many Copy Pasted ArtifactsProcedure-17
Avoid Too Many Copy Pasted ArtifactsView1
Avoid artifacts having recursive callsFunction2
Avoid artifacts having recursive callsProcedure=
Avoid empty catch blocksFunctionExists only on SQL Analyzer
Avoid empty catch blocksSQL Analyzer ProjectExists only on SQL Analyzer
Avoid empty catch blocksTriggerExists only on SQL Analyzer
Avoid empty catch blocksUniversal ProjectExists only on SQL Analyzer
Avoid exists and not exists independent clausesFunctionDetected only by SQL Analyzer
Avoid exists and not exists independent clausesProcedureDetected only by SQL Analyzer
Avoid explicit comparison with NULLFunctionExists only on SQL Analyzer
Avoid having multiple Artifacts inserting data on the same SQL TableTable683
Avoid having multiple Artifacts updating data on the same SQL TableTable29
Avoid having multiple artifacts deleting data on the same SQL tableTable2302
Avoid large Artifacts - too many Lines of CodeFunction=
Avoid large Artifacts - too many Lines of CodeProcedure=
Avoid large Artifacts - too many Lines of CodeView1
Avoid large Tables - too many columnsTable=
Avoid long Table or View namesTable=
Avoid long Table or View namesView=
Avoid non-SARGable queriesFunctionExists only on SQL Analyzer
Avoid non-SARGable queriesProcedureExists only on SQL Analyzer
Avoid non-SARGable queriesViewExists only on SQL Analyzer
Avoid non-indexed SQL queriesFunction=
Avoid non-indexed SQL queriesProcedure32
Avoid non-indexed SQL queriesView9
Avoid orphaned synonymsSynonym=
Avoid queries using old style join convention instead of ANSI-Standard joinsFunction1
Avoid queries using old style join convention instead of ANSI-Standard joinsProcedure=
Avoid queries using old style join convention instead of ANSI-Standard joinsView=
Avoid redundant indexesTable2
Avoid too many Indexes on one TableTable=
Avoid triggers, functions and procedures with a very low comment/code ratioFunction95
Avoid triggers, functions and procedures with a very low comment/code ratioProcedure4
Avoid triggers, functions and procedures with a very low comment/code ratioTrigger=
Avoid undocumented Triggers, Functions and ProceduresFunction=
Avoid undocumented Triggers, Functions and ProceduresProcedure=
Avoid undocumented Triggers, Functions and ProceduresTrigger=
Avoid unreferenced FunctionsFunction-1
Avoid unreferenced FunctionsProcedure=
Avoid unreferenced TablesTable-11
Avoid unreferenced viewsView=
Avoid using nullable" Columns except in the last position in a Table"TableExists only on PL/SQL Analyzer
Avoid using GOTO statementFunction=
Avoid using GOTO statementProcedure=
Avoid using SQL queries inside a loopFunction3
Avoid using SQL queries inside a loopProcedure=
Avoid using dynamic SQL in SQL ArtifactsFunction=
Avoid using dynamic SQL in SQL ArtifactsProcedure=
Avoid using the GROUP BY clauseFunction-2
Avoid using the GROUP BY clauseProcedure=
Column references should be qualifiedFunctionExists only on SQL Analyzer
Column references should be qualifiedProcedureExists only on SQL Analyzer
Column references should be qualifiedViewExists only on SQL Analyzer
Cyclomatic Complexity DistributionFunction-335
Cyclomatic Complexity DistributionProcedure2
Cyclomatic Complexity DistributionTrigger=
Cyclomatic Complexity DistributionViewDetected only by SQL Analyzer
DISTINCT should not be used in SQL SELECT statementsFunctionExists only on SQL Analyzer
DISTINCT should not be used in SQL SELECT statementsProcedureExists only on SQL Analyzer
DISTINCT should not be used in SQL SELECT statementsViewExists only on SQL Analyzer
Do not mix ANSI and non-ANSI JOIN syntax in the same queryFunction-42
Do not mix ANSI and non-ANSI JOIN syntax in the same queryProcedureDetected only by PL/SQL Analyzer
Do not mix ANSI and non-ANSI JOIN syntax in the same queryView=
High Complexity ArtifactsFunction-32
High Complexity ArtifactsProcedure-2
High Coupling ArtifactsFunction1
High Coupling ArtifactsProcedureDetected only by SQL Analyzer
High Coupling ArtifactsTriggerDetected only by SQL Analyzer
High Coupling ArtifactsView=
High Reuse by CallFunction1
High Reuse by CallProcedure=
High Reuse by CallTriggerDetected only by SQL Analyzer
High Reuse by CallView=
High SQL Complexity ArtifactsFunctionDetected only by PL/SQL Analyzer
High SQL Complexity ArtifactsProcedureDetected only by PL/SQL Analyzer
LIKE operator should not start with a wildcard characterFunctionExists only on SQL Analyzer
LIKE operator should not start with a wildcard characterViewExists only on SQL Analyzer
Large Size ArtifactsFunctionDetected only by PL/SQL Analyzer
Large Size ArtifactsProcedureDetected only by PL/SQL Analyzer
Low Complexity ArtifactsFunction375
Low Complexity ArtifactsProcedure2
Low Complexity ArtifactsViewDetected only by SQL Analyzer
Low Coupling ArtifactsFunction1
Low Coupling ArtifactsProcedure=
Low Coupling ArtifactsTriggerDetected only by SQL Analyzer
Low Coupling ArtifactsView=
Low SQL Complexity ArtifactsFunction491
Low SQL Complexity ArtifactsProcedure-14
Low SQL Complexity ArtifactsView2
Moderate Complexity ArtifactsFunction-8
Moderate Complexity ArtifactsProcedureDetected only by PL/SQL Analyzer
Moderate SQL Complexity ArtifactsFunctionDetected only by PL/SQL Analyzer
Moderate SQL Complexity ArtifactsProcedureDetected only by PL/SQL Analyzer
Moderate SQL Complexity ArtifactsViewDetected only by PL/SQL Analyzer
Never use SQL queries with a cartesian productFunction-5
Never use SQL queries with a cartesian productView-1
Never use WHEN OTHER THEN NULLFunctionExists only on SQL Analyzer
Number of Code LinesFunction=
Number of Code LinesProcedure=
Number of Code LinesTrigger=
Number of Code LinesView=
Number of DatablocksFunction=
Number of DatablocksProcedure=
Number of FormsFunction=
Number of FormsProcedure=
Number of FormsTrigger=
Number of FormsView=
Number of FunctionsTable=
Number of TablesView=
Number of ViewsTrigger=
Prefer PRIVATE to PUBLIC synonymSynonym=
Prefer UNION ALL to UNIONFunction-2
Prefer UNION ALL to UNIONProcedure=
Prefer UNION ALL to UNIONView=
Replace OR conditions testing equality on the same identifier in SQL WHERE clauses by an IN test conditionFunctionDetected only by SQL Analyzer
Replace OR conditions testing equality on the same identifier in SQL WHERE clauses by an IN test conditionProcedureDetected only by SQL Analyzer
Reuse by Call DistributionFunction-4
Reuse by Call DistributionProcedureDetected only by SQL Analyzer
Reuse by Call DistributionTriggerDetected only by SQL Analyzer
Reuse by Call DistributionView=
SQL Complexity DistributionFunction327
SQL Complexity DistributionProcedure24
SQL Complexity DistributionTrigger=
SQL Complexity DistributionView23
Small Size ArtifactsFunction-1849
Small Size ArtifactsProcedure-115
Small Size ArtifactsTriggerDetected only by PL/SQL Analyzer
Small Size ArtifactsView-92
Specify column names instead of column numbers in ORDER BY clausesFunctionExists only on SQL Analyzer
Table naming convention - character set controlTableDetected only by SQL Analyzer
Tables aliases should not end with a numeric suffixFunctionExists only on SQL Analyzer
Tables aliases should not end with a numeric suffixProcedureExists only on SQL Analyzer
Tables aliases should not end with a numeric suffixViewExists only on SQL Analyzer
Tables should be aliasedFunctionExists only on SQL Analyzer
Tables should be aliasedProcedureExists only on SQL Analyzer
Tables should be aliasedViewExists only on SQL Analyzer
Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueriesFunctionExists only on SQL Analyzer
Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueriesProcedureExists only on SQL Analyzer
Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueriesViewExists only on SQL Analyzer
Use WHEN OTHERS in exception managementFunction338
Use WHEN OTHERS in exception managementProcedureDetected only by SQL Analyzer
Use WHEN OTHERS in exception managementTrigger=
Use at most one statement per lineFunction-152
Use at most one statement per lineProcedure-2
VARCHAR2 and NVARCHAR2 should be usedFunction5
VARCHAR2 and NVARCHAR2 should be usedPackage-2
VARCHAR2 and NVARCHAR2 should be usedProcedure1
VARCHAR2 and NVARCHAR2 should be usedTable=
Very High Reuse by CallFunction8
Very High Reuse by CallProcedure=
Very High Reuse by CallView=