Ce n'est pas ainsi que vous devez comparer les valeurs de data_length
et data_precision
. Comparez-les comme des nombres appropriés, ne les convertissez pas en chaîne :
DECLARE
old_length NUMBER;
old_prec NUMBER;
BEGIN
SELECT data_length, coalesce(data_precision,0)
INTO old_length, old_prec
FROM user_tab_cols
WHERE table_name='EX_EMPLOYEE'
AND column_name='ID';
IF (old_length <> 6 and old_prec <> 2) THEN
EXECUTE IMMEDIATE ('ALTER TABLE EX_EMPLOYEE MODIFY ID NUMERIC(6,2)');
END IF;
END;
/
Notez que le SELECT COUNT(*)
après la première sélection est inutile. S'il n'y a pas une telle colonne, le premier SELECT data_length, data_precision INTO
lancera déjà un ORA-01403: no data found
exception et le code n'atteindra jamais la vérification si la colonne existe.