-
Notifications
You must be signed in to change notification settings - Fork 80
Description
As mentioned in #181 the guideline is too strict IMO.
There are some cases where a violation can be considered a false positive. For example for the following data types (based on SQL Language Reference 19c) :
- BINARY_FLOAT
- BINARY_DOUBLE
- LONG
- LONG RAW
- DATE
- BLOB
- CLOB
- NCLOB
- BFILE
- ROWID
- INTEGER
- DOUBLE PRECISION
- REAL
- ...
For these datatypes it is not possible to define a size or a precision and scale. So the data type of the parameter is always fully qualified. It's not passible that a VALUE_ERROR is thrown when assigning the parameter value to a local variable of the same data type.
So, I suggest to limit the check to chosen data types, where we know that a size, precision or scale can be relevant and VALUE_ERROR is possible and in the responsibility of the caller. Here's the full list:
| Data type | Optional size/precision/scale/...? | Comment |
|---|---|---|
| CHAR | No | |
| VARCHAR2 | No | |
| NCHAR | Yes | The default is a single character, the length of the parameter is undefined, hence relevant. |
| NVARCHAR2 | No | |
| NUMBER | Yes | Throws a value_error, hence relevant. |
| Yes | Value is rounded, does not throw a value_error, hence irrelevant. | |
| RAW | No | |
| Yes | Value is rounded, does not throw a value_error, hence irrelevant. | |
| INTERVAL YEAR TO MONTH | Yes | Throws a value_error, hence relevant. |
| INTERVAL DAY TO SECOND | Yes | Throws a value_error, hence relevant. |
| Yes | Does not throw a value_error, should not be used anyway, hence irrelevant | |
| CHARACTER [VARYING] | No | |
| VARCHAR | No | |
| NATIONAL CHAR[ACTER] [VARYING] | No | |
| NUMERIC | Yes | Throws a value_error, hence relevant. |
| DECIMAL | Yes | Throws a value_error, hence relevant. |
| DEC | Yes | Throws a value_error, hence relevant. |
| ...%TYPE | Yes | We do not know anything about the datatype, can be VARCHAR2 (relevant) or DATE (irrelevant), hence relevant. |
When limiting the guideline to these data types some false negatives are possible. E.g when defining a constrained subtype. With static code analysis and a limited scope of a file that's probably unavoidable to reduce the number of false positives.