SQLのスキャンルール
Contrast Scanでは、SQLに対して以下のルールをサポートしています。
深刻度 | Contrastルール | エンジンルールID | 説明 |
---|---|---|---|
重大 | Detect Unaware Cross Joins | OPT.SQL.SQL_PB.DetectUnawareCrossJoins | DetectUnawareCrossJoins:クエリにおける「意図しない」デカルト積の発生の回避 |
重大 | Fetch And Declare Same Fields | OPT.SQL.SQL_PB.FetchAndDeclareSameFields | FetchAndDeclareSameFields:カーソルフィールド数の一致(DECLARE CURSOR文で指定した取得するフィールド数はFETCH文で指定したフィールド数と一致している必要あり) |
重大 | Avoid Correlated Sub Selects | OPT.SQL.SQL_PERFORMANCE.AvoidCorrelatedSubSelects | AvoidCorrelatedSubSelects:外側のSELECT文で定義した列を使用するネストしたSELECT文の回避 |
重大 | Cursor For Update Where Current | OPT.SQL.SQL_PERFORMANCE.CursorForUpdateWhereCurrent | CursorForUpdateWhereCurrent:カーソルがFOR UPDATEで宣言されている場合のDELETEおよびUPDATEにおける、WHERE CURRENT句の使用 |
重大 | Dont Select Known Fields | OPT.SQL.SQL_PERFORMANCE.DontSelectKnownFields | DontSelectKnownFields:SELECTクエリにおけるWHERE句で使用するフィールド取得の禁止 |
高 | Avoid Scroll Cursor | OPT.SQL.AvoidScrollCursor | AvoidScrollCursor:SCROLL CURSOR句の使用禁止 |
高 | Check Updt Dlt Rowset | OPT.SQL.CheckUpdtDltRowset | CheckUpdtDltRowset:MULTIROWオプション付きのUPDATE文またはDELETE分における、FOR ROW n OF ROWSET句の使用制限 |
高 | Check Insert Not Atomic | OPT.SQL.CheckInsertNotAtomic | CheckInsertNotAtomic:MULTIROWオプション付きのSELECT文における、NOT ATOMIC CONTINUE ON SQLEXCEPTIONの使用制限 |
高 | Avoid Dynamic SQL | OPT.SQL.AvoidDynamicSql | AvoidDynamicSql:動的SQL使用の回避 |
高 | Avoid Lock Table | OPT.SQL.AvoidLockTable | AvoidLockTable:LOCK TABLE文の使用の回避 |
高 | Avoid Numeric References In By Clauses | OPT.SQL.SQL_MAINTAINABILITY.AvoidNumericReferencesInByClauses | AvoidNumericReferencesInByClauses:* BY句における数値インデックスによる列参照の禁止 |
高 | Use The As Keyword | OPT.SQL.SQL_MAINTAINABILITY.UseTheAsKeyword | UseTheAsKeyword:テーブルのエイリアス設定時におけるASキーワードの使用 |
高 | Avoid Declared Unopened Cursors | OPT.SQL.SQL_PERFORMANCE.AvoidDeclaredUnopenedCursors | AvoidDeclaredUnopenedCursors:カーソルを宣言した場合のオープン(OPEN文でカーソルを開く必要あり) |
高 | Avoid For Update Wait Forever | OPT.SQL.SQL_PERFORMANCE.AvoidForUpdateWaitForever | AvoidForUpdateWaitForever:NOWAITまたはWAIT nを指定しないFOR UPDATEの使用の回避 |
高 | Avoid Opened Unclosed Cursors | OPT.SQL.SQL_PERFORMANCE.AvoidOpenedUnclosedCursors | AvoidOpenedUnclosedCursors:カーソルをオープンした場合のクローズ(CLOSE文でカーソルを閉じる必要あり) |
高 | Avoid Opened Unused Cursors | OPT.SQL.SQL_PERFORMANCE.AvoidOpenedUnusedCursors | AvoidOpenedUnusedCursors:カーソルをオープンした場合の使用(カーソルを使用してデータを取得する必要あり) |
高 | Avoid Union | OPT.SQL.SQL_PERFORMANCE.AvoidUnion | AvoidUnion:UNIONによる選択の回避 |
高 | No Current Clause | OPT.SQL.SQL_PERFORMANCE.NoCurrentClause | NoCurrentClause:CURRENT句を含むSQLクエリの使用制限(負荷が大きいため、必要な場合にのみ使用する必要あり) |
情報 | Avoid Concat Operator | OPT.SQL.AvoidConcatOperator | AvoidConcatOperator:連結演算子の使用の回避 |
情報 | Avoid Current Server | OPT.SQL.AvoidCurrentServer | AvoidCurrentServer:CURRENT SERVERの使用禁止 |
情報 | Avoid Numeric Cursor | OPT.SQL.AvoidNumericCursor | AvoidNumericCursor:適切でないカーソル名の命名 |
情報 | Avoid Current Time | OPT.SQL.AvoidCurrentTime | AvoidCurrentTime:CURRENT TIMEの使用禁止 |
情報 | Avoid Current Date | OPT.SQL.AvoidCurrentDate | AvoidCurrentDate:CURRENT DATEの使用禁止 |
情報 | Avoid Non Declared Cursor | OPT.SQL.AvoidNonDeclaredCursor | AvoidNonDeclaredCursor:事前に宣言されていないカーソルの使用 |
情報 | Avoid Current Timestamp | OPT.SQL.AvoidCurrentTimestamp | AvoidCurrentTimestamp:CURRENT TIMESTAMP、CURRENT DATE、CURRENT TIMEの使用禁止 |
情報 | Check Nulls In Select Count | OPT.SQL.CheckNullsInSelectCount | CheckNullsInSelectCount:COUNT関数を含むクエリにおけるNULLインジケータの使用禁止 |
情報 | Use Null Indicator | OPT.SQL.UseNullIndicator | UseNullIndicator:MAX、MIN、AVG、SUM関数を使用したクエリにおけるNULLインジケータの使用 |
情報 | Avoid Non Qualified Joins | OPT.SQL.SQL_PORTABILITY.AvoidNonQualifiedJoins | AvoidNonQualifiedJoins:結合の種類の明示 |
低 | Do Not Use Negation In Where | OPT.SQL.DoNotUseNegationInWhere | DoNotUseNegationInWhere:否定演算子の使用禁止 |
低 | Avoid Whenever | OPT.SQL.AvoidWhenever | AvoidWhenever:WHENEVER句の使用禁止 |
低 | Avoid Host Operations | OPT.SQL.AvoidHostOperations | AvoidHostOperations:WHERE句における算術演算の実行の回避 |
低 | Avoid Having | OPT.SQL.AvoidHaving | AvoidHaving:HAVING句の使用禁止 |
低 | Check Simple Condition | OPT.SQL.CheckSimpleCondition | CheckSimpleCondition:WHERE句の条件の簡略化 |
低 | Avoid Qualified Tables In Queries | OPT.SQL.SQL_MAINTAINABILITY.AvoidQualifiedTablesInQueries | AvoidQualifiedTablesInQueries:クエリ内でのテーブル名の修飾の回避 |
低 | One SQL Statement Per Line | OPT.SQL.SQL_MAINTAINABILITY.OneSQLStatementPerLine | OneSQLStatementPerLine:1行に1つのSQL文のみを書き込み |
低 | Qualified Tables In Queries | OPT.SQL.SQL_MAINTAINABILITY.QualifiedTablesInQueries | QualifiedTablesInQueries:クエリで参照されるすべてのテーブル名を修飾することが必要 |
低 | Avoid Insert Without Fields Specification | OPT.SQL.SQL_PB.AvoidInsertWithoutFieldsSpecification | AvoidInsertWithoutFieldsSpecification:すべてのINSERT文におけるフィールドの指定の必要性(例:INSERT INTO table(column1,column2) VALUES (value1,value2)) |
低 | Avoid Group By | OPT.SQL.SQL_PERFORMANCE.AvoidGroupBy | AvoidGroupBy:GROUP BY句の使用の回避 |
中 | Avoid Case In Select | OPT.SQL.AvoidCaseInSelect | AvoidCaseInSelect:CASE句の使用禁止 |
中 | Check Number Tables | OPT.SQL.CheckNumberTables | CheckNumberTables:複数のテーブルを含むクエリの記述の制限 |
中 | Fully Qualified Names In Columns | OPT.SQL.SQL_MAINTAINABILITY.FullyQualifiedNamesInColumns | FullyQualifiedNamesInColumns:列名を参照する際の修飾名の使用 |
中 | Avoid Natural Joins | OPT.SQL.SQL_PB.AvoidNaturalJoins | AvoidNaturalJoins:NATURAL JOINの回避(バグが発生しやすくメンテナンス困難なため) |
中 | Avoid Nested Selects | OPT.SQL.SQL_PERFORMANCE.AvoidNestedSelects | AvoidNestedSelects:ネストしたSELECT文の回避 |
中 | Avoid Queries On Many Tables | OPT.SQL.SQL_PERFORMANCE.AvoidQueriesOnManyTables | AvoidQueriesOnManyTables:多くのテーブルを参照するJOINクエリの回避 |
中 | Avoid Select Asterisk | OPT.SQL.SQL_PERFORMANCE.AvoidSelectAsterisk | AvoidSelectAsterisk:SELECT *の使用禁止 |
中 | Avoid Too Many Joins | OPT.SQL.SQL_PERFORMANCE.AvoidTooManyJoins | AvoidTooManyJoins:JOINが多すぎるクエリの回避 |
中 | Detect Implicit Joins | OPT.SQL.SQL_PERFORMANCE.DetectImplicitJoins | DetectImplicitJoins:暗黙的なJOINの使用禁止 |
中 | Prefer On Over Using | OPT.SQL.SQL_PORTABILITY.PreferOnOverUsing | PreferOnOverUsing:USING句をそれと等価のON句へ置換することを推奨 |