Oracle introduces some fixes and new features in each release, but there are still problems
1. Oracle does not support transactional DDL: a transaction is considered closed when a CREATE, DROP, RENAME or ALTER command is executed, a hidden COMMIT is executed. If the transaction contains DML commands, Oracle commits the transaction as a whole, and then commits the DDL command as a separate transaction. This would be especially convenient for particularly complex DDL installation scripts2.Problems with handling NULL in SQ
Note that NULL values are not comparable to each other or to other non-NULL values... Oracle should treat the use of NULL in conditions after the WHERE clause of comparison operators as an error, any conditions like a = NULL, a < NULL.
SELECT * FROM HR.EMPLOYEES WHERE LAST_NAME = NULL;
SELECT * FROM HR.EMPLOYEES WHERE LAST_NAME <> NULL;
Such queries never return anything, and people with less experience are not aware of it. In my opinion, an error should be generated: invalid use of operators with NULL, use any of operators IS NULL or IS NOT NULL
Empty string '' should be forbidden, because it is de facto a NULL value.
SELECT NVL('', 'I am NULL') FROM DUAL;
Result: I am NULL
3,CLOB handling is the same as VARCHAR2 handling.
The idea is to have built-in functions instead of functions in package DBMS_LOB.
- LENGTH instead of DBMS_LOB.GETLEGTH
- SUBSTR instead of DBMS_LOB.SUBSTR
- INSTR instead of DBMS_LOB.INSTR
- To have the = and <> operators work like DBMS_LOB.COMPARE
4.To have a built-in function to convert the first 4000 characters of type LONG to VARCHAR2 .
LONG
and LONG RAW
are both deprecated. Yet they still exist in the data dictionary and legacy systems. For
this reason, it is still quite common to see questions in Oracle forums
about querying and manipulating LONGs. These questions are prompted
because the LONG datatype is extremely inflexible and is subject to a
number of restrictions.