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

Introduction

The comparison has been done between PL-SQL Analyzer 8.3.16 and SQL Analyzer 3.4.0-beta3 (AIP 8.3.16 + datacolumnaccess 1.0.0-beta2), on a representative sample focused on Oracle PL-SQL Packages and Types. Sources are confidential, extracted with CAST Database Extractor, without parameters (full Instance), Oracle version is 11.2.0.2.0.

You can find the differences bellow.


TQI

AnalyzerTQI
SQL

2.44900109665184

Oracle2.69593522967072

Number of data functions and transaction entry points per APPLICATION

Analyzercnt_datafunctionscntdfp_functionpointscntdf_calibratedfunctionpointscnt_transactionscnttfp_functionpointscntt_calibratedfunctionpoints
SQL17961000710007000
Oracle153085338533000

Delta compared with Oracle

By object type

ObjectTypeDeltaExplanation
Column- 0.003 % (Oracle : 67249 SQL : 67247)

Even if we have less, we have the goods ones. 

Some Oracle columns, on objects tables are fakes.

Foreign Key- 2.617 % (Oracle : 917 SQL : 893)

We miss details when src files are malformed, e.g.:

CONSTRAINT FK_NAME_01 ( %CAST_AST_WithResolutionSymbolReference.resolutionSymbol% ) REFERENCES TABLE_02 ( %CAST_AST_WithResolutionSymbolReference.resolutionSymbol% ) ON DELETE NO ACTION VALIDATE,


CONSTRAINT FK_NAME_02 ( %CAST_AST_WithResolutionSymbolReference.resolutionSymbol% ) REFERENCES TABLE_03 ( %CAST_AST_WithResolutionSymbolReference.resolutionSymbol% ) ON DELETE NO ACTION VALIDATE

Function+ 1.517 % (Oracle : 2791 SQL : 2834)

We detect more functions compared with Oracle

Indexes Primary Keys Unique Constraints- 71.986 % (Oracle : 3741 SQL : 1048)

We miss indexes on SQL compared with Oracle, when src files are malformed.

E.g. : 

CREATE  INDEX %CAST_Symbol_WithParent.parent%.IDX_01 ON %CAST_ANSISQL_Index.indexedObject% ( COL1, COL2)

or

CONSTRAINT PK_NAME PRIMARY KEY ( %CAST_AST_WithResolutionSymbolReference.resolutionSymbol% ) VALIDATE

Method+ 100 % (Oracle : 0 SQL : 745)Exists only on SQL Analyzer
Package 100 % (Oracle : 698 SQL : 698)


Procedure- 9.297 % (Oracle : 3668 SQL : 3327)

We miss some procedures, this is a bug that should be fixed

Schema- 33.333 % (Oracle : 21 SQL : 14)We miss empty schema (with no objects) referenced only in uaxDirectory file, with no impact on function points or TQI
Synonym 100 % (Oracle : 3764 SQL : 3764)
Table 100 % (Oracle : 1982 SQL : 1982)
Trigger 100 % (Oracle : 7 SQL : 7)
Type- 2.516 % (Oracle : 914 SQL : 891)

We miss 23 Type on SQL compared with Oracle, when src files are malformed, e.g. : src file contain only CREATE OR REPLACE and nothing else. We also miss some TYPE creates as tables of NUMBER, and should investigated why we miss them.

View 100 % (Oracle : 4073 SQL : 4073)
Check Constraint- 100 % (Oracle : 5138 SQL : 0)The object is missing on SQL Analyzer, with no impact on function points or TQI
Database Link- 100 % (Oracle : 2 SQL : 0)

The object is missing on SQL Analyzer, gm

with no impact on function points or TQI

Instance- 100 % (Oracle : 1 SQL : 0)The object is missing on SQL Analyzer, with no impact on function points or TQI
Sequence

- 100 % (Oracle : 260 SQL : 0)

The object is missing on SQL Analyzer, with no impact on function points or TQI

By link type

KindOfLinkCallerTypeCalleeTypeDeltaExplanation
ACCESSFunctionColumn+ 0.620 % (Oracle : 12973 SQL : 13054)

We detect more links compared with Oracle

ACCESSPackageColumn- 100 % (Oracle : 169 SQL : 0)

We miss columns on SQL for table accessed directly in packages.

Should be fixed.

ACCESSProcedureColumn+ 5.005 % (Oracle : 17329 SQL : 18242)

We detect more links compared with Oracle

ACCESSViewColumn- 18.093 % (Oracle : 59995 SQL : 49140)Bug related to synonym on views that should be fixed
ACCESSViewType- 100 % (Oracle : 2 SQL : 0)PL/SQL add 2 false links when selected columns have the same name as an object type.
CALLFunctionFunction+ 42.246 % (Oracle : 689 SQL : 1193)We detect more links compared with Oracle
CALLFunctionProcedure- 37.678 % (Oracle : 913 SQL : 569)Should be fixed.
CALLMethodFunction+ 100 % (Oracle : 0 SQL : 1)
CALLMethodMethod+ 100 % (Oracle : 0 SQL : 14)
CALLMethodProcedure+ 100 % (Oracle : 0 SQL : 7)
CALLMethodType+ 100 % (Oracle : 0 SQL : 7)
CALLPackageProcedure- 100 % (Oracle : 2 SQL : 0)

We miss columns on SQL for procedures accessed directly in a PL/SQL block.

Should be fixed.

CALLProcedureFunction+ 0.644 % (Oracle : 617 SQL : 621)

We detect more links compared with Oracle

CALLProcedureProcedure- 14.702 % (Oracle : 1510 SQL : 1288)

Should be fixed.

CALLTriggerFunction- 100 % (Oracle : 9 SQL : 0)

The case of DDL Trrigers.

Should be fixed.

CALLTriggerProcedure- 75.000 % (Oracle : 4 SQL : 1)

We miss Function / Procedures, and that's why we also miss links.

Should be fixed.

CALLViewFunction- 15.000 % (Oracle : 320 SQL : 272)

We miss Function / Procedures, and that's why we also miss links.

Should be fixed.

CALLViewMethod+ 100 % (Oracle : 0 SQL : 7)
USEFunctionSynonym+ 100 % (Oracle : 0 SQL : 55)
USEFunctionTable+ 18.068 % (Oracle : 3410 SQL : 4162)We detect more links compared with Oracle
USEFunctionView+ 12.957 % (Oracle : 262 SQL : 301)We detect more links compared with Oracle
USEMethodTable+ 100 % (Oracle : 0 SQL : 1)
USEProcedureSynonym+ 100 % (Oracle : 0 SQL : 198)
USEProcedureTable+ 3.136 % (Oracle : 4201 SQL : 4337)

We detect more links compared with Oracle

USEProcedureView- 23.629 % (Oracle : 237 SQL : 181)

We miss homonymous package which has as effect, we miss function / procedures from missed packages and that's why we miss links.

Should be fixed.

USETriggerTable 100 % (Oracle : 1 SQL : 1)


USETableType+ 100 % (Oracle : 0 SQL : 23)
USETypeType+ 100 % (Oracle : 0 SQL : 48)
USEViewSynonym+ 100 % (Oracle : 0 SQL : 6)
USEViewTable+ 0.908 % (Oracle : 7638 SQL : 7708)We detect more links compared with Oracle
USEViewView+ 9.064 % (Oracle : 3371 SQL : 3707)We detect more links compared with Oracle

By equivalent quality rule

Missed functions/procedures/tables have an impact on quality rules.

Quality Rule NameObject TypeNumber of violations detected by SQLNumber of violations detected by Oracle
Always define column names when inserting valuesFunction240
Always define column names when inserting valuesProcedure730
Average Coupling ArtifactsFunction265
Average Coupling ArtifactsProcedure2110
Average Coupling ArtifactsView2628
Average Reuse by CallFunction27641449
Average Reuse by CallMethod7450
Average Reuse by CallProcedure33081124
Average Reuse by CallTrigger77
Average Reuse by CallView38813888
Average Size ArtifactsFunction27400
Average Size ArtifactsProcedure11326
Average Size ArtifactsView2530
Avoid SELECT *" queries"Function55163
Avoid SELECT *" queries"Procedure4073
Avoid SELECT *" queries"View47239
Avoid Artifacts with High Cyclomatic ComplexityFunction128111
Avoid Artifacts with High Cyclomatic ComplexityProcedure6981
Avoid Artifacts with High Cyclomatic ComplexityView140
Avoid Artifacts with High Depth of CodeFunction1135
Avoid Artifacts with High Depth of CodeProcedure730
Avoid Artifacts with High Depth of Nested SubqueriesFunction9510
Avoid Artifacts with High Depth of Nested SubqueriesProcedure784
Avoid Artifacts with High Depth of Nested SubqueriesView726
Avoid Artifacts with High Essential ComplexityFunction747128
Avoid Artifacts with High Essential ComplexityMethod10
Avoid Artifacts with High Essential ComplexityProcedure35382
Avoid Artifacts with High Essential ComplexityTrigger10
Avoid Artifacts with High Essential ComplexityView1370
Avoid Artifacts with High Fan-InFunction6438
Avoid Artifacts with High Fan-InProcedure5550
Avoid Artifacts with High Fan-InView9288
Avoid Artifacts with High Fan-OutFunction7065
Avoid Artifacts with High Fan-OutMethod10
Avoid Artifacts with High Fan-OutProcedure6595
Avoid Artifacts with High Fan-OutView4223
Avoid Artifacts with High Integration ComplexityFunction13262
Avoid Artifacts with High Integration ComplexityProcedure6951
Avoid Artifacts with High Integration ComplexityView140
Avoid Artifacts with High RAW SQL ComplexityFunction64145
Avoid Artifacts with High RAW SQL ComplexityProcedure592
Avoid Artifacts with High RAW SQL ComplexityView041
Avoid Artifacts with SQL statement including subqueriesFunction457506
Avoid Artifacts with SQL statement including subqueriesProcedure391493
Avoid Artifacts with SQL statement including subqueriesView734890
Avoid Artifacts with a Complex SELECT ClauseFunction0383
Avoid Artifacts with a Complex SELECT ClauseProcedure0178
Avoid Artifacts with high Commented-out Code Lines/Code Lines ratioFunction307253
Avoid Artifacts with high Commented-out Code Lines/Code Lines ratioMethod40
Avoid Artifacts with high Commented-out Code Lines/Code Lines ratioProcedure262174
Avoid Artifacts with high Commented-out Code Lines/Code Lines ratioView8281
Avoid Artifacts with lines longer than X charactersFunction291333
Avoid Artifacts with lines longer than X charactersProcedure268273
Avoid Artifacts with lines longer than X charactersTrigger11
Avoid Artifacts with lines longer than X charactersView10701066
Avoid Artifacts with queries on too many Tables and/or ViewsFunction223279
Avoid Artifacts with queries on too many Tables and/or ViewsProcedure206219
Avoid Artifacts with queries on too many Tables and/or ViewsView7970
Avoid Artifacts with too many parametersFunction141104
Avoid Artifacts with too many parametersProcedure13747
Avoid Cursors inside a loopProcedure26
Avoid Rule HINT  /*+ rule */ or --+ rule in PL/SQL codeView02
Avoid SQL queries with implicit conversions in the WHERE clauseFunction0224
Avoid SQL queries with implicit conversions in the WHERE clauseProcedure0214
Avoid SQL queries with implicit conversions in the WHERE clauseView039
Avoid Tables not using referential integrityTable15071478
Avoid Tables not using referential integrityType029
Avoid Tables with more than 20 columns on an OLTP systemTable202191
Avoid Tables with more than 20 columns on an OLTP systemType012
Avoid Tables without Primary KeyTable1013984
Avoid Tables without Primary KeyType08
Avoid Too Many Copy Pasted ArtifactsFunction526747
Avoid Too Many Copy Pasted ArtifactsMethod300
Avoid Too Many Copy Pasted ArtifactsProcedure440563
Avoid Too Many Copy Pasted ArtifactsView19571963
Avoid artifacts having recursive callsFunction221
Avoid artifacts having recursive callsProcedure213
Avoid cascading TriggersTrigger10
Avoid empty catch blocksProcedure60
Avoid empty catch blocksSQL Analyzer Project10
Avoid empty catch blocksUniversal Project10
Avoid exists and not exists independent clausesFunction80
Avoid exists and not exists independent clausesProcedure60
Avoid exists and not exists independent clausesView4190
Avoid explicit comparison with NULLView10
Avoid having multiple artifacts deleting data on the same SQL tableTable905785
Avoid having multiple artifacts deleting data on the same SQL tableType030
Avoid having multiple artifacts inserting data on the same SQL TableTable41103700
Avoid having multiple artifacts inserting data on the same SQL TableType068
Avoid having multiple artifacts updating data on the same SQL TableTable17322302
Avoid having multiple artifacts updating data on the same SQL TableType098
Avoid large Artifacts - too many Lines of CodeFunction582561
Avoid large Artifacts - too many Lines of CodeMethod130
Avoid large Artifacts - too many Lines of CodeProcedure517500
Avoid large Artifacts - too many Lines of CodeView548549
Avoid large Tables - too many columnsTable4236
Avoid large Tables - too many columnsType06
Avoid long Table or View namesTable14401417
Avoid long Table or View namesType023
Avoid long Table or View namesView31073107
Avoid non-SARGable queriesFunction700
Avoid non-SARGable queriesProcedure1110
Avoid non-SARGable queriesView2220
Avoid non-indexed SQL queriesFunction676404
Avoid non-indexed SQL queriesProcedure618450
Avoid non-indexed SQL queriesView18761199
Avoid orphaned synonymsSynonym56662
Avoid queries using old style join convention instead of ANSI-Standard joinsFunction361348
Avoid queries using old style join convention instead of ANSI-Standard joinsProcedure450438
Avoid queries using old style join convention instead of ANSI-Standard joinsView20442001
Avoid redundant indexesTable079
Avoid synonym with both private and public definitionSynonym55
Avoid too many Indexes on one TableTable015
Avoid too many Indexes on one TableType014
Avoid triggers, functions and procedures with a very low comment/code ratioFunction1060545
Avoid triggers, functions and procedures with a very low comment/code ratioProcedure957341
Avoid triggers, functions and procedures with a very low comment/code ratioTrigger66
Avoid undocumented Triggers, Functions and ProceduresFunction965458
Avoid undocumented Triggers, Functions and ProceduresProcedure863276
Avoid undocumented Triggers, Functions and ProceduresTrigger66
Avoid unreferenced FunctionsFunction20252172
Avoid unreferenced FunctionsProcedure27393538
Avoid unreferenced TablesTable533540
Avoid unreferenced TablesType06
Avoid unreferenced viewsView739822
Avoid using nullable" Columns except in the last position in a Table"Table01850
Avoid using GOTO statementFunction88
Avoid using SQL queries inside a loopFunction7959
Avoid using SQL queries inside a loopProcedure158216
Avoid using dynamic SQL in SQL ArtifactsFunction236105
Avoid using dynamic SQL in SQL ArtifactsProcedure11592
Avoid using dynamic SQL in SQL ArtifactsTrigger02
Avoid using the GROUP BY clauseFunction71134
Avoid using the GROUP BY clauseProcedure161166
Avoid using the GROUP BY clauseView1150
Column references should be qualifiedFunction80
Column references should be qualifiedProcedure530
Column references should be qualifiedView2270
Cyclomatic Complexity DistributionFunction1480922
Cyclomatic Complexity DistributionMethod7430
Cyclomatic Complexity DistributionProcedure2923692
Cyclomatic Complexity DistributionTrigger66
Cyclomatic Complexity DistributionView39120
DISTINCT should not be used in SQL SELECT statementsFunction2080
DISTINCT should not be used in SQL SELECT statementsProcedure1900
DISTINCT should not be used in SQL SELECT statementsView840
Do not mix ANSI and non-ANSI JOIN syntax in the same queryFunction2224
Do not mix ANSI and non-ANSI JOIN syntax in the same queryProcedure1017
Do not mix ANSI and non-ANSI JOIN syntax in the same queryView2325
Errors should be handled in stored procedures and functionsFunction2210
Errors should be handled in stored procedures and functionsProcedure2680
High Complexity ArtifactsFunction7268
High Complexity ArtifactsProcedure2644
High Complexity ArtifactsView30
High Complexity classesType10
High Coupling ArtifactsFunction53
High Coupling ArtifactsProcedure62
High Coupling ArtifactsView108
High Reuse by CallFunction6723
High Reuse by CallProcedure4126
High Reuse by CallView156149
High SQL Complexity ArtifactsFunction15203
High SQL Complexity ArtifactsProcedure0178
High SQL Complexity ArtifactsView0107
LIKE operator should not start with a wildcard characterFunction20
LIKE operator should not start with a wildcard characterProcedure120
LIKE operator should not start with a wildcard characterView110
LONG and LONG RAW datatypes should no longer be usedFunction01
LONG and LONG RAW datatypes should no longer be usedProcedure02
LONG and LONG RAW datatypes should no longer be usedTable5252
LONG and LONG RAW datatypes should no longer be usedView0221
Large Size ArtifactsFunction10170
Large Size ArtifactsProcedure8184
Large Size ArtifactsView039
Low Complexity ArtifactsFunction1194347
Low Complexity ArtifactsMethod20
Low Complexity ArtifactsProcedure294250
Low Complexity ArtifactsTrigger11
Low Complexity ArtifactsView1300
Low Coupling ArtifactsFunction6723
Low Coupling ArtifactsProcedure4126
Low Coupling ArtifactsView156149
Low OO Complexity ClassType8900
Low SQL Complexity ArtifactsFunction560375
Low SQL Complexity ArtifactsProcedure512384
Low SQL Complexity ArtifactsTrigger10
Low SQL Complexity ArtifactsView747653
Moderate Complexity ArtifactsFunction11689
Moderate Complexity ArtifactsProcedure133159
Moderate Complexity ArtifactsView280
Moderate Complexity classesType8900
Moderate Fan-In classesType8910
Moderate Fan-Out classesType8910
Moderate OO Complexity ClassType10
Moderate SQL Complexity ArtifactsFunction4399
Moderate SQL Complexity ArtifactsProcedure253
Moderate SQL Complexity ArtifactsView0479
Never use SQL queries with a cartesian productFunction1419
Never use SQL queries with a cartesian productProcedure7285
Never use SQL queries with a cartesian productView5773
Never use WHEN OTHER THEN NULLProcedure50
Number of Code LinesFunction28621480
Number of Code LinesMethod7450
Number of Code LinesProcedure33761162
Number of Code LinesTrigger77
Number of Code LinesView40734073
Number of DatablocksFunction28621480
Number of DatablocksProcedure33761162
Number of FilesType8910
Number of FormsFunction28621480
Number of FormsMethod7450
Number of FormsProcedure33761162
Number of FormsTrigger77
Number of FormsView40734073
Number of FunctionsTable19821953
Number of FunctionsType029
Number of TablesView40734073
Number of ViewsTrigger77
Prefer PRIVATE to PUBLIC synonymSynonym32003200
Prefer UNION ALL to UNIONFunction7083
Prefer UNION ALL to UNIONProcedure5960
Prefer UNION ALL to UNIONView122147
Replace OR conditions testing equality on the same identifier in SQL WHERE clauses by an IN test conditionFunction100
Replace OR conditions testing equality on the same identifier in SQL WHERE clauses by an IN test conditionProcedure110
Replace OR conditions testing equality on the same identifier in SQL WHERE clauses by an IN test conditionView340
Reuse by Call DistributionFunction53
Reuse by Call DistributionProcedure62
Reuse by Call DistributionView68
SQL Complexity DistributionFunction2244803
SQL Complexity DistributionMethod7450
SQL Complexity DistributionProcedure2862547
SQL Complexity DistributionTrigger67
SQL Complexity DistributionView33262834
Small Size ArtifactsFunction345466
Small Size ArtifactsMethod10
Small Size ArtifactsProcedure305356
Small Size ArtifactsTrigger02
Small Size ArtifactsView1742830
Specify column names instead of column numbers in ORDER BY clausesFunction30
Specify column names instead of column numbers in ORDER BY clausesProcedure10
Table naming convention - character set controlSQL Analyzer Project10
Table naming convention - character set controlTable11700
Table naming convention - character set controlUniversal Project10
Tables aliases should not end with a numeric suffixFunction980
Tables aliases should not end with a numeric suffixProcedure500
Tables aliases should not end with a numeric suffixView2160
Tables should be aliasedFunction20
Tables should be aliasedProcedure10
Tables should be aliasedView420
Triggers should not directly modify tables, a procedure or function should be used insteadTrigger10
Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueriesFunction640
Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueriesProcedure370
Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueriesView1230
Use WHEN OTHERS in exception managementFunction624
Use WHEN OTHERS in exception managementProcedure1412
Use at most one statement per lineFunction1780
Use at most one statement per lineProcedure3126
VARCHAR2 and NVARCHAR2 should be usedFunction3265
VARCHAR2 and NVARCHAR2 should be usedPackage2766
VARCHAR2 and NVARCHAR2 should be usedProcedure5050
VARCHAR2 and NVARCHAR2 should be usedTable9494
Very High Reuse by CallFunction265
Very High Reuse by CallProcedure2110
Very High Reuse by CallView3028
View naming convention - character set controlView16200