これは data_length
の値を比較する方法ではありません および data_precision
.それらを適切な数値として比較し、それを文字列に変換しないでください:
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; /
プレ>
SELECT COUNT(*)
後 最初の選択は役に立ちません。そのような列がない場合、最初のSELECT data_length, data_precision INTO
すでにORA-01403: no data found
がスローされます 例外が発生し、列が存在する場合、コードはチェックに到達しません。