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

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

CASTPUBS cover almost all kind of Oracle objects, links and quality rules, that's why it has been selected as example.

You can find here bellow differences.

TQI

<query>

analyzertqi
SQL2.59073431994084
Oracle2.58794953216398


Number of data functions and transaction entry points per APPLICATION

<query>

analyzercnt_datafunctionscntdfp_functionpointscntdf_calibratedfunctionpointscnt_transactionscnttfp_functionpointscntt_calibratedfunctionpoints
SQL16100100000
Oracle127272000

Number of objects by type

<query>

objecttypenumberofobjectsCompared with Oracle
Column100=
Foreign Key16=
Function24=
Indexes Primary Keys Unique Constraints21

-11

We are betters on SQL Analyzer, on PL/SQL Analyzer a part of indexes are duplicated.

Package14=
Procedure17=
Schema2=
Synonym2=
Table16=
Trigger4=
View5=
Check Constraint56Object type not implemented on SQL
Instance1Object type not implemented on SQL
Package Cursor2Object type not implemented on SQL
Sequence1Object type not implemented on SQL

Compare links by type

<query>

kindoflinkcallertypecalleetypeCompared with Oracle
ACCESSFunctionColumn

We discover more links than PL/SQL Analyzer

ACCESSPackageColumn

Detected only by PL/SQL Analyzer

This is the case of package headers

ACCESSProcedureColumn

-16

PL/SQL discover 16 links more than SQL Analyzer but a part of them are false links, they don't really exists

ACCESSTriggerColumn=
ACCESSViewColumn=
CALLFunctionFunction=
CALLProcedureFunction=
CALLProcedureProcedure=
CALLProcedureTriggerDetected only by SQL Analyzer
CALLTriggerTriggerDetected only by SQL Analyzer
USEFunctionSynonymDetected only by SQL Analyzer
USEFunctionTable=
USEFunctionView=
USEPackageTable

Detected only by PL/SQL Analyze

Same comment as for columns, this is the case of package headers

USEProcedureSynonymDetected only by SQL Analyzer
USEProcedureTable=
USETriggerSynonymDetected only by SQL Analyzer
USETriggerTable=
USEViewTable=


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 Reuse by CallFunction=
Average Reuse by CallProcedure=
Average Reuse by CallTrigger=
Average Reuse by CallView=
Average Size ArtifactsFunctionDetected only by PL/SQL Analyzer
Average Size ArtifactsProcedureDetected only by PL/SQL Analyzer
Average Size ArtifactsTriggerDetected only by PL/SQL Analyzer
Avoid "SELECT *" queriesFunctionDetected only by PL/SQL Analyzer
Avoid "SELECT *" queriesProcedureDetected only by PL/SQL Analyzer
Avoid Artifacts with High Essential ComplexityFunctionDetected only by SQL Analyzer
Avoid Artifacts with High Essential ComplexityProcedureDetected only by SQL Analyzer
Avoid Artifacts with High Essential ComplexityTriggerDetected only by SQL Analyzer
Avoid Artifacts with SQL statement including subqueriesFunction-2
Avoid Artifacts with SQL statement including subqueriesTrigger=
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 ratioProcedureDetected only by PL/SQL Analyzer
Avoid Artifacts with lines longer than X charactersFunction=
Avoid Artifacts with lines longer than X charactersProcedure=
Avoid Tables without Primary KeyTable=
Avoid Too Many Copy Pasted ArtifactsFunction-2
Avoid cascading TriggersTrigger=
Avoid empty catch blocksProcedureExists only on SQL Analyzer
Avoid exists and not exists independent clausesFunctionDetected only by SQL Analyzer
Avoid having multiple Artifacts inserting data on the same SQL TableTable=
Avoid having multiple artifacts deleting data on the same SQL tableTable=
Avoid large Artifacts - too many Lines of CodeFunction=
Avoid large Artifacts - too many Lines of CodeProcedure=
Avoid large Artifacts - too many Lines of CodeTrigger=
Avoid long Table or View namesView=
Avoid non-SARGable queriesFunctionExists only on SQL Analyzer
Avoid non-indexed SQL queriesFunction-1
Avoid non-indexed SQL queriesProcedure-1
Avoid non-indexed SQL queriesView-1
Avoid orphaned synonymsSynonym=
Avoid queries using old style join convention instead of ANSI-Standard joinsFunction=
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 indexesTable=
Avoid triggers functions and procedures with a very low comment/code ratioFunction=
Avoid triggers functions and procedures with a very low comment/code ratioProcedure=
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=
Avoid unreferenced FunctionsProcedure=
Avoid unreferenced TablesTable=
Avoid unreferenced viewsView=
Avoid using "nullable" Columns except in the last position in a TableTableExists only on PL/SQL Analyzer
Avoid using GOTO statementFunction=
Avoid using SQL queries inside a loopFunction

Detected only by PL/SQL Analyzer

False violation, the loop is a cursor, that's why the violation is not raised on SQL Analyzer since 3.4.0-beta3. Since 3.4.0-beta3 the rule is calculated by extension and not by MA.

Column references should be qualifiedProcedureExists only on SQL Analyzer
Column references should be qualifiedViewExists only on SQL Analyzer
Cyclomatic Complexity DistributionFunctionDetected only by PL/SQL Analyzer
Cyclomatic Complexity DistributionProcedure=
Cyclomatic Complexity DistributionTrigger=
Cyclomatic Complexity DistributionViewDetected only by SQL Analyzer
DISTINCT should not be used in SQL SELECT statementsViewExists only on SQL Analyzer
Low Complexity ArtifactsFunction7
Low Complexity ArtifactsProcedure=
Low Complexity ArtifactsTrigger=
Low SQL Complexity ArtifactsFunction-2
Low SQL Complexity ArtifactsProcedureDetected only by PL/SQL Analyzer
Low SQL Complexity ArtifactsTrigger1
Moderate Complexity ArtifactsFunction1
Never use WHEN OTHER THEN NULLProcedureExists 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=
SQL Complexity DistributionFunction2
SQL Complexity DistributionProcedure1
SQL Complexity DistributionTriggerDetected only by PL/SQL Analyzer
SQL Complexity DistributionView=
Small Size ArtifactsFunction-11
Small Size ArtifactsProcedure-11
Small Size ArtifactsTriggerDetected only by PL/SQL Analyzer
Small Size ArtifactsViewDetected only by PL/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 aliasedProcedureExists only on SQL Analyzer
Tables should be aliasedViewExists only on SQL Analyzer
Triggers should not directly modify tables a procedure or function should be used insteadTrigger=
VARCHAR2 and NVARCHAR2 should be usedFunction12
VARCHAR2 and NVARCHAR2 should be usedPackageDetected only by PL/SQL Analyzer but the same violation is duplicated : reported one time on the package function / procedure and also directly on the package
VARCHAR2 and NVARCHAR2 should be usedProcedure=
VARCHAR2 and NVARCHAR2 should be usedTable=