26

I have a table with a column that contains a few null values. I want to add a NOT NULL constraint on that column without updating the existing nulls to a non-null value. I want to keep the existing null values and check for future rows that they contain a not null value for this column. Is this possible? How?

3
  • 4
    Seems a little crazy to be violating your own constraints. Either it is or it isn't allowed to be null. Usually, that kind of, um, flexibility is set in the application feeding your database, not in the database itself. Doing what you want to do, that way lies madness. :) Commented Aug 23, 2013 at 4:18
  • You could have an insert/update trigger to reject any new nulls. But overall, this sounds like a bad idea. Commented Aug 23, 2013 at 4:24
  • Not crazy at all. I've used this on occasion in systems where they wanted to keep existing (old) data, but start checking a constraint for any new (or updated) data. Commented Aug 23, 2013 at 5:21

3 Answers 3

58

You can add an unvalidated constraint - it will not look at existing rows, but it will be checked for any new or updated rows.

ALTER TABLE mytable MODIFY mycolumn NOT NULL NOVALIDATE;

Just be aware that you won't be able to update an existing row unless it satisfies the constraint.

Also, be aware of the downside that the optimizer will not be able to take advantage of this constraint in making its plans - it has to assume that some rows may still have a null.

Sign up to request clarification or add additional context in comments.

2 Comments

Could you please provide some external links for further reference? Thanks!
What specifically are you after? Docs: docs.oracle.com/cd/E11882_01/server.112/e41084/…
-1

ALTER TABLE table_name SET column_name = '0' WHERE column_name IS NULL;

ALTER TABLE table_name MODIFY COLUMN(column_name NUMBER CONSTRAINT constraint_identifier NOT NULL);

This is of course assuming that your column is a number but it's the same thing really, you would just change the '0' to a default value that isn't null.

Comments

-1

Hammad: I face the problem and solve like following:

Alter table thr_empl_info modify THR_EM_DESIGNATION_ID not null

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.