<RULES version="1.3">
<PROPERTIES>
<SUMMARY>
<TOTAL>157</TOTAL>
<NOTES>This is the current version of the Rule Universe shipping with TOAD.</NOTES>
</SUMMARY>
<CATEGORY>
<CAT n="20" total="1">BUILTIN</CAT>
<CAT n="22" total="0">COLLECTION</CAT>
<CAT n="24" total="1">COMMENT</CAT>
<CAT n="26" total="7">CURSOR</CAT>
<CAT n="28" total="10">DATA TYPE</CAT>
<CAT n="30" total="8">EXCEPTION</CAT>
<CAT n="32" total="0">EXPRESSION</CAT>
<CAT n="38" total="4">FUNCTION</CAT>
<CAT n="40" total="3">GOTO</CAT>
<CAT n="42" total="5">IF</CAT>
<CAT n="44" total="9">LABEL</CAT>
<CAT n="46" total="3">LITERAL</CAT>
<CAT n="48" total="5">LOOP</CAT>
<CAT n="50" total="4">NULL</CAT>
<CAT n="52" total="2">PACKAGE</CAT>
<CAT n="54" total="4">PARAMETER</CAT>
<CAT n="56" total="3">PROCEDURE</CAT>
<CAT n="58" total="12">SQL</CAT>
<!--<CAT n="60" total="51">SQLPLUS</CAT>-->
<CAT n="62" total="1">TRIGGER</CAT>
<CAT n="64" total="8">VARIABLE</CAT>
<CAT n="68" total="3">PLSQL</CAT>
</CATEGORY>
<SEVERITY>
<SEV n="0" ico="297" total="115">INFORMATION</SEV>
<SEV n="1" ico="298" total="23">WARNING</SEV>
<SEV n="2" ico="299" total="6">SEVERE</SEV>
</SEVERITY>
<TYPES>
<TYPE n="0" ico="300" total="35">Code Correctness</TYPE>
<TYPE n="1" ico="302" total="26">Maintainability</TYPE>
<TYPE n="2" ico="301" total="14">Efficiency</TYPE>
<TYPE n="3" ico="303" total="31">Readability</TYPE>
<TYPE n="4" ico="304" total="38">Program Structure</TYPE>
</TYPES>
</PROPERTIES>
<RULE rid="2006" cat="20" sev="0" type="4">
<DEF>Use Native Dynamic SQL (i.e. EXECUTE IMMEDIATE) rather than calls to DBMS_SQL.</DEF>
<TIP>qrev:chc.rev?topid=R2006</TIP>
</RULE>
<RULE rid="2401" cat="24" sev="0" type="4">
<DEF>Avoid nesting comment blocks.</DEF>
<TIP>qrev:chc.rev?topid=R2401</TIP>
</RULE>
<RULE rid="2601" cat="26" sev="2" type="0">
<DEF>Ensure locally opened cursors will be closed.</DEF>
<TIP>qrev:chc.rev?topid=R2601</TIP>
</RULE>
<RULE rid="2603" cat="26" sev="1" type="0">
<DEF>Avoid procedure or function calls between a SQL operation and an implicit cursor test.</DEF>
<TIP>qrev:chc.rev?topid=R2603</TIP>
</RULE>
<RULE rid="2606" cat="26" sev="1" type="0">
<DEF>Confirm that the cursor you are referencing has been opened. </DEF>
<TIP>qrev:chc.rev?topid=R2606</TIP>
</RULE>
<RULE rid="2607" cat="26" sev="1" type="0">
<DEF>Avoid opening cursors that are already open.</DEF>
<TIP>qrev:chc.rev?topid=R2607</TIP>
</RULE>
<RULE rid="2608" cat="26" sev="1" type="0">
<DEF>Ensure that any local cursors you are referencing have actually been opened.</DEF>
<TIP>qrev:chc.rev?topid=R2608</TIP>
</RULE>
<RULE rid="2610" cat="26" sev="0" type="1">
<DEF>Limit use of weak REF CURSOR types.</DEF>
<TIP>qrev:chc.rev?topid=R2610</TIP>
</RULE>
<RULE rid="2613" cat="26" sev="0" type="3">
<DEF>Use %NOTFOUND cursor attribute instead of NOT %FOUND. </DEF>
<TIP>qrev:chc.rev?topid=R2613</TIP>
</RULE>
<RULE rid="2801" cat="28" sev="0" type="0">
<DEF>Use of ROWID or UROWID. </DEF>
<TIP>qrev:chc.rev?topid=R2801</TIP>
</RULE>
<RULE rid="2802" cat="28" sev="2" type="0">
<DEF>Avoid initializing strings with values that are too long. </DEF>
<TIP>qrev:chc.rev?topid=R2802</TIP>
</RULE>
<RULE rid="2803" cat="28" sev="0" type="0">
<DEF>Avoid use of LONG; consider LOB columns. </DEF>
<TIP>qrev:chc.rev?topid=R2803</TIP>
</RULE>
<RULE rid="2804" cat="28" sev="0" type="0">
<DEF>Limit use of CHAR.</DEF>
<TIP>qrev:chc.rev?topid=R2804</TIP>
</RULE>
<RULE rid="2805" cat="28" sev="0" type="0">
<DEF>Limit use of VARCHAR.</DEF>
<TIP>qrev:chc.rev?topid=R2805</TIP>
</RULE>
<RULE rid="2812" cat="28" sev="0" type="1">
<DEF>Consider defining subtypes for variables with identical datatypes.</DEF>
<TIP>qrev:chc.rev?topid=R2812</TIP>
</RULE>
<RULE rid="2827" cat="28" sev="0" type="0">
<DEF>Avoid CHAR, NCHAR, VARCHAR, VARCHAR2, NVARCHAR2 declarations with no precision. </DEF>
<TIP>qrev:chc.rev?topid=R2827</TIP>
</RULE>
<RULE rid="2829" cat="28" sev="0" type="2">
<DEF>Avoid declaring NUMBER or NUMBER subtype with no precision. </DEF>
<TIP>qrev:chc.rev?topid=R2829</TIP>
</RULE>
<!--<RULE rid="2830" cat="28" sev="0" type="2">
<DEF>Avoid declaring CHAR, NCHAR, VARCHAR, VARCHAR2, NVARCHAR2 with length greater than 500 characters. </DEF>
<TIP>qrev:chc.rev?topid=R2830</TIP>
</RULE>-->
<RULE rid="2831" cat="28" sev="0" type="2">
<DEF>Use PLS_INTEGER instead of INTEGER or equivalent subtypes. </DEF>
<TIP>qrev:chc.rev?topid=R2831</TIP>
</RULE>
<RULE rid="3001" cat="30" sev="0" type="1">
<DEF>Avoid using a WHEN OTHERS clause in an exception section without any other specific handlers.</DEF>
<TIP>qrev:chc.rev?topid=R3001</TIP>
</RULE>
<RULE rid="3002" cat="30" sev="0" type="1">
<DEF>Avoid use of EXCEPTION_INIT pragma for a -20,NNN error.</DEF>
<TIP>qrev:chc.rev?topid=R3002</TIP>
</RULE>
<RULE rid="3003" cat="30" sev="0" type="1">
<DEF>Avoid use of RAISE_APPLICATION_ERROR built-in with a hard-coded -20,NNN error number or hard-coded message. </DEF>
<TIP>qrev:chc.rev?topid=R3003</TIP>
</RULE>
<RULE rid="3004" cat="30" sev="0" type="4">
<DEF>Avoid masking exceptions with use of NULL statement in an exception handler.</DEF>
<TIP>qrev:chc.rev?topid=R3004</TIP>
</RULE>
<RULE rid="3005" cat="30" sev="0" type="4">
<DEF>Avoid un-handled exceptions.</DEF>
<TIP>qrev:chc.rev?topid=R3005</TIP>
</RULE>
<RULE rid="3006" cat="30" sev="0" type="4">
<DEF>Avoid using Oracle's predefined exceptions.</DEF>
<TIP>qrev:chc.rev?topid=R3006</TIP>
</RULE>
<RULE rid="3007" cat="30" sev="0" type="4">
<DEF>Ensure use of raising and handling an exception in the same scope.</DEF>
<TIP>qrev:chc.rev?topid=R3007</TIP>
</RULE>
<RULE rid="3010" cat="30" sev="0" type="3">
<DEF>Avoid naming exceptions the same as Oracle's predefined exceptions.</DEF>
<TIP>qrev:chc.rev?topid=R3010</TIP>
</RULE>
<RULE rid="3801" cat="38" sev="0" type="4">
<DEF>Use RETURN as the last statement in a function.</DEF>
<TIP>qrev:chc.rev?topid=R3801</TIP>
</RULE>
<RULE rid="3803" cat="38" sev="0" type="4">
<DEF>Avoid using more than one RETURN statement in a function's executable section.</DEF>
<TIP>qrev:chc.rev?topid=R3803</TIP>
</RULE>
<RULE rid="3805" cat="38" sev="0" type="4">
<DEF>Confirm that function does not need parameters.</DEF>
<TIP>qrev:chc.rev?topid=R3805</TIP>
</RULE>
<RULE rid="3806" cat="38" sev="0" type="4">
<DEF>Avoid coding functions with OUT parameters.</DEF>
<TIP>qrev:chc.rev?topid=R3806</TIP>
</RULE>
<RULE rid="4001" cat="40" sev="0" type="4">
<DEF>Avoid using GOTO in a loop.</DEF>
<TIP>qrev:chc.rev?topid=R4001</TIP>
</RULE>
<RULE rid="4002" cat="40" sev="1" type="4">
<DEF>Avoid using a backward GOTO.</DEF>
<TIP>qrev:chc.rev?topid=R4002</TIP>
</RULE>
<RULE rid="4003" cat="40" sev="0" type="4">
<DEF>Avoid use of GOTO statements.</DEF>
<TIP>qrev:chc.rev?topid=R4003</TIP>
</RULE>
<RULE rid="4201" cat="42" sev="2" type="0">
<DEF>Limit a CASE statement or expression to 128 choices. </DEF>
<TIP>qrev:chc.rev?topid=R4201</TIP>
</RULE>
<RULE rid="4204" cat="42" sev="0" type="3">
<DEF>Use a Boolean rather than a complex condition.</DEF>
<TIP>qrev:chc.rev?topid=R4204</TIP>
</RULE>
<!--<RULE rid="4207" cat="42" sev="0" type="2">
<DEF>Consider resequencing conditional logic for better performance.</DEF>
<TIP>qrev:chc.rev?topid=R4207</TIP>
</RULE>-->
<RULE rid="4210" cat="42" sev="0" type="3">
<DEF>Use the implicit value of boolean datatypes (True/False) in conditional logic.</DEF>
<TIP>qrev:chc.rev?topid=R4210</TIP>
</RULE>
<RULE rid="4213" cat="42" sev="0" type="3">
<DEF>Use CASE statement rather than a complex conditional IF statement.</DEF>
<TIP>qrev:chc.rev?topid=R4213</TIP>
</RULE>
<RULE rid="4401" cat="44" sev="2" type="0">
<DEF>Avoid undefined labels.</DEF>
<TIP>qrev:chc.rev?topid=R4401</TIP>
</RULE>
<RULE rid="4402" cat="44" sev="0" type="3">
<DEF>Avoid unlabeled nested LOOPs.</DEF>
<TIP>qrev:chc.rev?topid=R4402</TIP>
</RULE>
<RULE rid="4403" cat="44" sev="0" type="3">
<DEF>Avoid unlabeled nested blocks.</DEF>
<TIP>qrev:chc.rev?topid=R4403</TIP>
</RULE>
<RULE rid="4404" cat="44" sev="0" type="3">
<DEF>Avoid unlabeled END of program units, packages or types.</DEF>
<TIP>qrev:chc.rev?topid=R4404</TIP>
</RULE>
<RULE rid="4405" cat="44" sev="0" type="3">
<DEF>Avoid unlabeled END of labeled blocks.</DEF>
<TIP>qrev:chc.rev?topid=R4405</TIP>
</RULE>
<RULE rid="4406" cat="44" sev="0" type="3">
<DEF>Avoid unlabeled END of labeled loops.</DEF>
<TIP>qrev:chc.rev?topid=R4406</TIP>
</RULE>
<RULE rid="4407" cat="44" sev="1" type="3">
<DEF>Ensure block starting and ending labels match or block label is not missing.</DEF>
<TIP>qrev:chc.rev?topid=R4407</TIP>
</RULE>
<RULE rid="4408" cat="44" sev="1" type="3">
<DEF>Ensure loop starting and ending labels match or loop label is not missing.</DEF>
<TIP>qrev:chc.rev?topid=R4408</TIP>
</RULE>
<RULE rid="4409" cat="44" sev="1" type="3">
<DEF>Ensure END [LOOP] statement is not missing a semi-colon.</DEF>
<TIP>qrev:chc.rev?topid=R4409</TIP>
</RULE>
<RULE rid="4601" cat="46" sev="0" type="0">
<DEF>Avoid use of new-line or unprintable characters in literal strings.</DEF>
<TIP>qrev:chc.rev?topid=R4601</TIP>
</RULE>
<RULE rid="4602" cat="46" sev="0" type="1">
<DEF>Avoid use of literals in non-declarative parts of the program.</DEF>
<TIP>qrev:chc.rev?topid=R4602</TIP>
</RULE>
<RULE rid="4603" cat="46" sev="0" type="2">
<DEF>Avoid literal concatenations at runtime.</DEF>
<TIP>qrev:chc.rev?topid=R4603</TIP>
</RULE>
<RULE rid="4801" cat="48" sev="0" type="3">
<DEF>Use EXIT WHEN rather than IF THEN EXIT.</DEF>
<TIP>qrev:chc.rev?topid=R4801</TIP>
</RULE>
<RULE rid="4802" cat="48" sev="0" type="3">
<DEF>Avoid unlabeled EXIT statements in a labeled loop.</DEF>
<TIP>qrev:chc.rev?topid=R4802</TIP>
</RULE>
<RULE rid="4804" cat="48" sev="0" type="4">
<DEF>Avoid use of EXIT/RETURN statements in a FOR/WHILE loop.</DEF>
<TIP>qrev:chc.rev?topid=R4804</TIP>
</RULE>
<RULE rid="4806" cat="48" sev="0" type="4">
<DEF>Avoid use of unreferenced FOR loop indexes.</DEF>
<TIP>qrev:chc.rev?topid=R4806</TIP>
</RULE>
<RULE rid="4807" cat="48" sev="0" type="1">
<DEF>Avoid hard-coded upper or lower bound values with FOR loops.</DEF>
<TIP>qrev:chc.rev?topid=R4807</TIP>
</RULE>
<RULE rid="5001" cat="50" sev="0" type="0">
<DEF>Avoid comparisons with null value, consider using IS [NOT] NULL.</DEF>
<TIP>qrev:chc.rev?topid=R5001</TIP>
</RULE>
<RULE rid="5002" cat="50" sev="0" type="0">
<DEF>Avoid assigning strings of zero length to character-type variables.</DEF>
<TIP>qrev:chc.rev?topid=R5002</TIP>
</RULE>
<RULE rid="5003" cat="50" sev="0" type="3">
<DEF>Avoid initializing variables to NULL.</DEF>
<TIP>qrev:chc.rev?topid=R5003</TIP>
</RULE>
<RULE rid="5004" cat="50" sev="0" type="4">
<DEF>Use of NULL statements.</DEF>
<TIP>qrev:chc.rev?topid=R5004</TIP>
</RULE>
<RULE rid="5201" cat="52" sev="0" type="4">
<DEF>Avoid RETURN statements in the initialization section of the package body.</DEF>
<TIP>qrev:chc.rev?topid=R5201</TIP>
</RULE>
<RULE rid="5202" cat="52" sev="0" type="4">
<DEF>Avoid defining global public variables in the package specification.</DEF>
<TIP>qrev:chc.rev?topid=R5202</TIP>
</RULE>
<RULE rid="5401" cat="54" sev="0" type="0">
<DEF>Avoid using an IN OUT parameter as IN only.</DEF>
<TIP>qrev:chc.rev?topid=R5401</TIP>
</RULE>
<RULE rid="5402" cat="54" sev="0" type="0">
<DEF>Avoid using an IN OUT parameter as OUT only.</DEF>
<TIP>qrev:chc.rev?topid=R5402</TIP>
</RULE>
<RULE rid="5405" cat="54" sev="0" type="4">
<DEF>Ensure mode of parameter is specified with IN parameter.</DEF>
<TIP>qrev:chc.rev?topid=R5405</TIP>
</RULE>
<RULE rid="5406" cat="54" sev="0" type="4">
<DEF>Remove unused parameters or modify code to use the parameter.</DEF>
<TIP>qrev:chc.rev?topid=R5406</TIP>
</RULE>
<RULE rid="5601" cat="56" sev="0" type="4">
<DEF>Avoid using RETURN statements in a PROCEDURE.</DEF>
<TIP>qrev:chc.rev?topid=R5601</TIP>
</RULE>
<RULE rid="5602" cat="56" sev="0" type="4">
<DEF>Avoid coding procedures with no parameters.</DEF>
<TIP>qrev:chc.rev?topid=R5602</TIP>
</RULE>
<RULE rid="5603" cat="56" sev="0" type="4">
<DEF>Ensure locally defined procedures or functions are referenced.</DEF>
<TIP>qrev:chc.rev?topid=R5603</TIP>
</RULE>
<RULE rid="5801" cat="58" sev="1" type="0">
<DEF>Avoid storing ROWIDs or UROWIDs in a table.</DEF>
<TIP>qrev:chc.rev?topid=R5801</TIP>
</RULE>
<RULE rid="5803" cat="58" sev="0" type="1">
<DEF>Use FETCH into a record rather than a list of variables.</DEF>
<TIP>qrev:chc.rev?topid=R5803</TIP>
</RULE>
<RULE rid="5804" cat="58" sev="0" type="2">
<DEF>Ensure SELECT COUNT(*) is being used to check the number of rows and not merely the existence of rows.</DEF>
<TIP>qrev:chc.rev?topid=R5804</TIP>
</RULE>
<RULE rid="5805" cat="58" sev="0" type="2">
<DEF>Avoid using DELETE or UPDATE without a WHERE clause.</DEF>
<TIP>qrev:chc.rev?topid=R5805</TIP>
</RULE>
<RULE rid="5806" cat="58" sev="0" type="2">
<DEF>Avoid using exclusive table locks.</DEF>
<TIP>qrev:chc.rev?topid=R5806</TIP>
</RULE>
<RULE rid="5807" cat="58" sev="0" type="2">
<DEF>Avoid Cartesian queries; consider adding WHERE clause.</DEF>
<TIP>qrev:chc.rev?topid=R5807</TIP>
</RULE>
<!--<RULE rid="5808" cat="58" sev="0" type="2">
<DEF>Avoid using a built-in function with constant parameters in a WHERE clause.</DEF>
<TIP>qrev:chc.rev?topid=R5808</TIP>
</RULE>-->
<RULE rid="5809" cat="58" sev="0" type="3">
<DEF>Ensure elements in the SELECT list (either columns or expressions) are qualified by a table/view name.</DEF>
<TIP>qrev:chc.rev?topid=R5809</TIP>
</RULE>
<RULE rid="5810" cat="58" sev="0" type="1">
<DEF>Use synonyms in SQL table clauses rather than hard coded owner.table references.</DEF>
<TIP>qrev:chc.rev?topid=R5810</TIP>
</RULE>
<RULE rid="5813" cat="58" sev="1" type="0">
<DEF>Avoid coding triggers with COMMIT or ROLLBACK statements unless used as autonomous transactions.</DEF>
<TIP>qrev:chc.rev?topid=R5813</TIP>
</RULE>
<RULE rid="5814" cat="58" sev="0" type="3">
<DEF>Use output bind arguments in the RETURNING INTO clause of dynamic INSERT, UPDATE, or DELETE statements rather than the USING clause.</DEF>
<TIP>qrev:chc.rev?topid=R5814</TIP>
</RULE>
<RULE rid="5816" cat="58" sev="0" type="3">
<DEF>Use CASE construct rather than DECODE.</DEF>
<TIP>qrev:chc.rev?topid=R5816</TIP>
</RULE>
<!--
<RULE rid="6001" cat="60" sev="1" type="0">
<DEF>Ensure this slash command is intended to re-execute the previous command.</DEF>
<TIP>qrev:chc.rev?topid=R6001</TIP>
</RULE>
<RULE rid="6002" cat="60" sev="1" type="0">
<DEF>Ensure the SQL*Plus buffer has code to execute before issuing a slash command.</DEF>
<TIP>qrev:chc.rev?topid=R6002</TIP>
</RULE>
<RULE rid="6003" cat="60" sev="1" type="0">
<DEF>Avoid ending a REM(ARK) line with a dash.</DEF>
<TIP>qrev:chc.rev?topid=R6003</TIP>
</RULE>
<RULE rid="6004" cat="60" sev="1" type="0">
<DEF>Use ORDER BY column_name for SELECT when you BREAK ON column_name.</DEF>
<TIP>qrev:chc.rev?topid=R6004</TIP>
</RULE>
<RULE rid="6005" cat="60" sev="1" type="0">
<DEF>Use ORDER BY column_list for SELECT when you BREAK ON column_list</DEF>
<TIP>qrev:chc.rev?topid=R6005</TIP>
</RULE>
<RULE rid="6006" cat="60" sev="1" type="0">
<DEF>Use BREAK ON item ... rather than several individual BREAK commands</DEF>
<TIP>qrev:chc.rev?topid=R6006</TIP>
</RULE>
<RULE rid="6007" cat="60" sev="1" type="0">
<DEF>Avoid using a NOPRINT COLUMN option in the COMPUTE OF column.</DEF>
<TIP>qrev:chc.rev?topid=R6007</TIP>
</RULE>
<RULE rid="6009" cat="60" sev="1" type="0">
<DEF>The expression, column, or column alias you reference in the COMPUTE ON clause must occur in the SELECT command and in the most recent BREAK command ON list.</DEF>
<TIP>qrev:chc.rev?topid=R6009</TIP>
</RULE>
<RULE rid="6010" cat="60" sev="1" type="0">
<DEF>If you reference either ROW or REPORT in the ON clause, also reference ROW or REPORT in the most recent BREAK command ON list.</DEF>
<TIP>qrev:chc.rev?topid=R6010</TIP>
</RULE>
<RULE rid="6011" cat="60" sev="1" type="0">
<DEF>Avoid the use of the COPY command as it is not being enhanced and is likely to be made obsolete.</DEF>
<TIP>qrev:chc.rev?topid=R6011</TIP>
</RULE>
<RULE rid="6013" cat="60" sev="1" type="0">
<DEF>Avoid specifying a PAUSE command with no command text as it will stop script execution, which may be confusing.</DEF>
<TIP>qrev:chc.rev?topid=R6013</TIP>
</RULE>
<RULE rid="6014" cat="60" sev="0" type="1">
<DEF>@directory_path/file_name is not portable, use @file_name and SQLPATH for portability.</DEF>
<TIP>qrev:chc.rev?topid=R6014</TIP>
</RULE>
<RULE rid="6015" cat="60" sev="0" type="1">
<DEF>@@directory_path/file_name is not portable, use @@file_name and SQLPATH for portability.</DEF>
<TIP>qrev:chc.rev?topid=R6015</TIP>
</RULE>
<RULE rid="6016" cat="60" sev="0" type="1">
<DEF>START directory_path/file_name is not portable, use START file_name and SQLPATH for portability.</DEF>
<TIP>qrev:chc.rev?topid=R6016</TIP>
</RULE>
<RULE rid="6017" cat="60" sev="0" type="1">
<DEF>SPOOL directory_path/file_name is not portable, use SPOOL file_name and rely on current working directory.</DEF>
<TIP>qrev:chc.rev?topid=R6017</TIP>
</RULE>
<RULE rid="6018" cat="60" sev="0" type="1">
<DEF>STORE directory_path/file_name is not portable, use STORE file_name and rely on current working directory.</DEF>
<TIP>qrev:chc.rev?topid=R6018</TIP>
</RULE>
<RULE rid="6019" cat="60" sev="0" type="1">
<DEF>Use DEFAULT clause with ACCEPT in order to specifically handle an empty reply.</DEF>
<TIP>qrev:chc.rev?topid=R6019</TIP>
</RULE>
<RULE rid="6020" cat="60" sev="0" type="1">
<DEF>Use LIKE clause with ATTRIBUTE when you have many similar items for easier changeability.</DEF>
<TIP>qrev:chc.rev?topid=R6020</TIP>
</RULE>
<RULE rid="6021" cat="60" sev="0" type="1">
<DEF>Use LIKE clause with COLUMN when you have many similar items for easier changeability.</DEF>
<TIP>qrev:chc.rev?topid=R6021</TIP>
</RULE>
<RULE rid="6022" cat="60" sev="0" type="1">
<DEF>Avoid hard coding passwords in CONNECT as this is not very secure and is harder to maintain if the password changes.</DEF>
<TIP>qrev:chc.rev?topid=R6022</TIP>
</RULE>
<RULE rid="6023" cat="60" sev="0" type="1">
<DEF>GET directory_path/file_name is not portable, use GET file_name and SQLPATH for portability.</DEF>
<TIP>qrev:chc.rev?topid=R6023</TIP>
</RULE>
<RULE rid="6024" cat="60" sev="0" type="1">
<DEF>Avoid HOST command usage. It is not portable since the database server platform may change.</DEF>
<TIP>qrev:chc.rev?topid=R6024</TIP>
</RULE>
<RULE rid="6025" cat="60" sev="0" type="3">
<DEF>When setting ACCEPT variables, use names with more than 3 characters to enhance readability.</DEF>
<TIP>qrev:chc.rev?topid=R6025</TIP>
</RULE>
<RULE rid="6026" cat="60" sev="0" type="3">
<DEF>When setting alias names in ATTRIBUTE commands, use names with more than 3 characters to enhance readability.</DEF>
<TIP>qrev:chc.rev?topid=R6026</TIP>
</RULE>
<RULE rid="6027" cat="60" sev="0" type="3">
<DEF>When setting alias names in COLUMN commands, use names with more than 3 characters to enhance readability.</DEF>
<TIP>qrev:chc.rev?topid=R6027</TIP>
</RULE>
<RULE rid="6028" cat="60" sev="0" type="3">
<DEF>When setting DEFINE variables, use names with more than 3 characters to enhance readability.</DEF>
<TIP>qrev:chc.rev?topid=R6028</TIP>
</RULE>
<RULE rid="6029" cat="60" sev="0" type="3">
<DEF>Use explicit transaction or termination controls for readability and predictability.</DEF>
<TIP>qrev:chc.rev?topid=R6029</TIP>
</RULE>
<RULE rid="6030" cat="60" sev="0" type="4">
<DEF>Place a CLEAR BREAK in a script that sets a BREAK.</DEF>
<TIP>qrev:chc.rev?topid=R6030</TIP>
</RULE>
<RULE rid="6031" cat="60" sev="0" type="4">
<DEF>Place a CLEAR COLUMNS in a script that sets a COLUMN.</DEF>
<TIP>qrev:chc.rev?topid=R6031</TIP>
</RULE>
<RULE rid="6032" cat="60" sev="0" type="4">
<DEF>Place a CLEAR COMPUTES in a script that sets a COMPUTE.</DEF>
<TIP>qrev:chc.rev?topid=R6032</TIP>
</RULE>
<RULE rid="6033" cat="60" sev="0" type="4">
<DEF>Place a TIMING STOP in a script that starts TIMING.</DEF>
<TIP>qrev:chc.rev?topid=R6033</TIP>
</RULE>
<RULE rid="6034" cat="60" sev="0" type="4">
<DEF>Place UNDEFINE commands in a script that sets DEFINE variables.</DEF>
<TIP>qrev:chc.rev?topid=R6034</TIP>
</RULE>
<RULE rid="6035" cat="60" sev="0" type="4">
<DEF>Place a TTITLE OFF command in a script that sets TTITLE.</DEF>
<TIP>qrev:chc.rev?topid=R6035</TIP>
</RULE>
<RULE rid="6036" cat="60" sev="0" type="4">
<DEF>Place a BTITLE OFF command in a script that sets BTITLE.</DEF>
<TIP>qrev:chc.rev?topid=R6036</TIP>
</RULE>
<RULE rid="6037" cat="60" sev="0" type="4">
<DEF>Place a REPHEADER OFF command in a script that sets REPHEADER.</DEF>
<TIP>qrev:chc.rev?topid=R6037</TIP>
</RULE>
<RULE rid="6038" cat="60" sev="0" type="4">
<DEF>Place a REPFOOTER OFF command in a script that sets REPFOOTER.</DEF>
<TIP>qrev:chc.rev?topid=R6038</TIP>
</RULE>
<RULE rid="6039" cat="60" sev="0" type="4">
<DEF>Place a SPOOL OFF command in a script that uses SPOOL to a file.</DEF>
<TIP>qrev:chc.rev?topid=R6039</TIP>
</RULE>
<RULE rid="6040" cat="60" sev="2" type="4">
<DEF>Set SPOOL OFF before running a script.</DEF>
<TIP>qrev:chc.rev?topid=R6040</TIP>
</RULE>
<RULE rid="6041" cat="60" sev="0" type="4">
<DEF>Include a WHENEVER SQLERROR statement to explicitly handle errors.</DEF>
<TIP>qrev:chc.rev?topid=R6041</TIP>
</RULE>
<RULE rid="6042" cat="60" sev="0" type="1">
<DEF>SAVE directory_path/file_name is not portable, use SAVE file_name and rely on current working directory.</DEF>
<TIP>qrev:chc.rev?topid=R6042</TIP>
</RULE>
<RULE rid="6043" cat="60" sev="0" type="2">
<DEF>ARRAYSIZE should not be set greater than 100.</DEF>
<TIP>qrev:chc.rev?topid=R6043</TIP>
</RULE>
<RULE rid="6044" cat="60" sev="0" type="3">
<DEF>Avoid setting the command separator to anything other than the default.</DEF>
<TIP>qrev:chc.rev?topid=R6044</TIP>
</RULE>
<RULE rid="6045" cat="60" sev="0" type="1">
<DEF>Avoid setting the compatibility mode to anything other than native.</DEF>
<TIP>qrev:chc.rev?topid=R6045</TIP>
</RULE>
<RULE rid="6046" cat="60" sev="0" type="3">
<DEF>Avoid setting CONCAT to anything other than the default.</DEF>
<TIP>qrev:chc.rev?topid=R6046</TIP>
</RULE>
<RULE rid="6047" cat="60" sev="0" type="3">
<DEF>Avoid setting DEFINE to anything other than the default.</DEF>
<TIP>qrev:chc.rev?topid=R6047</TIP>
</RULE>
<RULE rid="6048" cat="60" sev="0" type="3">
<DEF>Avoid setting the ESCAPE character to anything other than the default.</DEF>
<TIP>qrev:chc.rev?topid=R6048</TIP>
</RULE>
<RULE rid="6049" cat="60" sev="0" type="3">
<DEF>Avoid setting the heading separator character to anything other than the default.</DEF>
<TIP>qrev:chc.rev?topid=R6049</TIP>
</RULE>
<RULE rid="6050" cat="60" sev="0" type="3">
<DEF>Avoid setting the SQL terminator to anything other than the default.</DEF>
<TIP>qrev:chc.rev?topid=R6050</TIP>
</RULE>
<RULE rid="6051" cat="60" sev="0" type="0">
<DEF>Place a TERMOUT ON command in a script that issues TERMOUT OFF.</DEF>
<TIP>qrev:chc.rev?topid=R6051</TIP>
</RULE>
<RULE rid="6052" cat="60" sev="0" type="0">
<DEF>Place a TIMING OFF command in a script that issues TIMING ON.</DEF>
<TIP>qrev:chc.rev?topid=R6052</TIP>
</RULE>
<RULE rid="6053" cat="60" sev="0" type="3">
<DEF>When setting NEW_VALUE names in COLUMN commands, use names with more than 3 characters to enhance readability.</DEF>
<TIP>qrev:chc.rev?topid=R6053</TIP>
</RULE>
-->
<RULE rid="6202" cat="62" sev="0" type="2">
<DEF>Ensure row-level database trigger has a WHEN clause.</DEF>
<TIP>qrev:chc.rev?topid=R6202</TIP>
</RULE>
<RULE rid="6401" cat="64" sev="2" type="0">
<DEF>Avoid multiple declarations of labels and variables.</DEF>
<TIP>qrev:chc.rev?topid=R6401</TIP>
</RULE>
<RULE rid="6404" cat="64" sev="0" type="1">
<DEF>Use parameters or pull in definitions rather than referencing external variables in a local program unit.</DEF>
<TIP>qrev:chc.rev?topid=R6404</TIP>
</RULE>
<RULE rid="6405" cat="64" sev="0" type="4">
<DEF>Avoid defining variables that are not referenced inside the program.</DEF>
<TIP>qrev:chc.rev?topid=R6405</TIP>
</RULE>
<RULE rid="6406" cat="64" sev="0" type="4">
<DEF>Avoid multiple definitions of the same element in different scopes.</DEF>
<TIP>qrev:chc.rev?topid=R6406</TIP>
</RULE>
<RULE rid="6407" cat="64" sev="0" type="4">
<DEF>Ensure item is defined in as deep a scope as possible.</DEF>
<TIP>qrev:chc.rev?topid=R6407</TIP>
</RULE>
<RULE rid="6411" cat="64" sev="1" type="2">
<DEF>Avoid using NOT NULL variable constraints.</DEF>
<TIP>qrev:chc.rev?topid=R6411</TIP>
</RULE>
<RULE rid="6413" cat="64" sev="1" type="1">
<DEF>Avoid using quoted identifiers for variable names.</DEF>
<TIP>qrev:chc.rev?topid=R6413</TIP>
</RULE>
<RULE rid="6414" cat="64" sev="0" type="1">
<DEF>Avoid using overly short names for declared or implicitly declared identifiers.</DEF>
<TIP>qrev:chc.rev?topid=R6414</TIP>
</RULE>
<RULE rid="6801" cat="68" sev="0" type="0">
<DEF>Ensure all statements can be reached (dead code).</DEF>
<TIP>qrev:chc.rev?topid=R6801</TIP>
</RULE>
<RULE rid="6802" cat="68" sev="0" type="1">
<DEF>Avoid coding program units too long.</DEF>
<TIP>qrev:chc.rev?topid=R6802</TIP>
</RULE>
<!--<RULE rid="6806" cat="68" sev="0" type="2">
<DEF>Use native execution for PL/SQL that is compute intensive and has little SQL.</DEF>
<TIP>qrev:chc.rev?topid=R6806</TIP>
</RULE>-->
<RULE rid="10201" cat="-1" sev="-1" type="-1">
<DEF>%d Table operations found in execution plan exceeding the upper limit of the Complex SQL Table Range.</DEF>
<TIP>qrev:chc.rev?topid=R10201</TIP>
</RULE>
<RULE rid="10202" cat="-1" sev="-1" type="-1">
<DEF>Full table scan with number of rows larger than the Problematic SQL Full Table Scan Threshold (%d Rows).</DEF>
<TIP>qrev:chc.rev?topid=R10202</TIP>
</RULE>
<RULE rid="10203" cat="-1" sev="-1" type="-1">
<DEF>Full table scan with table size larger than the Problematic SQL Full Table Scan Threshold (%d Kbytes).</DEF>
<TIP>qrev:chc.rev?topid=R10203</TIP>
</RULE>
<RULE rid="10204" cat="-1" sev="-1" type="-1">
<DEF>Full table scan with table's initial extent larger than the Problematic SQL Full Table Scan Threshold (%d Kbytes).</DEF>
<TIP>qrev:chc.rev?topid=R10204</TIP>
</RULE>
<RULE rid="10205" cat="-1" sev="-1" type="-1">
<DEF>SQL with full table scan - Table size unavailable.</DEF>
<TIP>qrev:chc.rev?topid=R10205</TIP>
</RULE>
<RULE rid="10206" cat="-1" sev="-1" type="-1">
<DEF>Nested loop with full table scan of number of rows larger than the Problematic SQL Full Table Scan Threshold (%d Rows).</DEF>
<TIP>qrev:chc.rev?topid=R10206</TIP>
</RULE>
<RULE rid="10207" cat="-1" sev="-1" type="-1">
<DEF>Nested loop with full table scan of table size larger than the Problematic SQL Full Table Scan Threshold (%d Kbytes).</DEF>
<TIP>qrev:chc.rev?topid=R10207</TIP>
</RULE>
<RULE rid="10208" cat="-1" sev="-1" type="-1">
<DEF>Nested loop with full table scan of table's initial extent larger than the Problematic SQL Full Table Scan Threshold (%d Kbytes).</DEF>
<TIP>qrev:chc.rev?topid=R10208</TIP>
</RULE>
<RULE rid="10209" cat="-1" sev="-1" type="-1">
<DEF>SQL with full table scan in nested loop - Table size unavailable.</DEF>
<TIP>qrev:chc.rev?topid=R10209</TIP>
</RULE>
<RULE rid="10401" cat="-1" sev="-1" type="-1">
<DEF>%d Table operations found in execution plan falling in the Complex SQL Table Range.</DEF>
<TIP>qrev:chc.rev?topid=R10401</TIP>
</RULE>
<RULE rid="10402" cat="-1" sev="-1" type="-1">
<DEF>SQL with full index scan.</DEF>
<TIP>qrev:chc.rev?topid=R10402</TIP>
</RULE>
<RULE rid="10601" cat="-1" sev="-1" type="-1">
<DEF>Number of table scan operations less than %d</DEF>
<TIP>qrev:chc.rev?topid=R10601</TIP>
</RULE>
<RULE rid="10801" cat="-1" sev="-1" type="-1">
<DEF>Invalid SQL Statement</DEF>
<TIP>qrev:chc.rev?topid=R10801</TIP>
</RULE>
</RULES>
