Oracle Check Constraint violation - sql

I created a constraint on the date column of the table X. When I created a check constraint on date as date > '01-jan-2000' there is an error message ("Check constraint violated"). When I tried again to check the date if it comes after 1996 (date > '01-jan-1996'), it worked well.
Is there a reason for it?
I used this code:
ALTER TABLE X
ADD CONSTRAINT DATE_CONST CHECK(DATE>'01-JAN-2000') -- ERROR
ALTER TABLE X
ADD CONSTRAINT DATE_CONST CHECK(DATE>'01-JAN-1996') -- WORKED

there are two things you are done wrong.
a) You can not assing name to column keyword like "DATE".
b) you must to convert date when you add CONSTRAINT like this :
ALTER TABLE test ADD CONSTRAINT DATE_CONST CHECK(testdate>to_date('01-JAN-2000', 'dd-mon-yyyy'));
http://sqlfiddle.com/#!4/98198/9 is example of this question.
Edit : If your table has record before specified date, Check constraint will be compiled but it will be invalid. You must be update before specied date records to newly date.

Related

check constraint with date

i want to apply check constraint with date for eg delivery date is greate than order date how to apply this constraint any can help me out
alter table sales_order modify dely_date check (dely_date>order_Date);
its show error
This is how to add CHECK constraint in an existing column :
alter table sales_order ADD CONSTRAINT CHK_dates check (dely_date>order_Date);

Adding constraint to check if the value contains specific characters- SQL Server

My Check constraint conflicts when adding values, any answer to why it is wrong will be much appreciated.
Here is the question:
Ensure that the Student’s NIC number contains 9 digits (0-9) and one
character which is “V” or “v”.
Here is the value I want to add to the table:
946785467v
Here is the constraint I used:
ALTER TABLE Student
ADD CONSTRAINT stdNIC CHECK(NIC LIKE '[0-9]{9}[V-v]');
Better to change the constraint as below.
ALTER TABLE Student ADD CONSTRAINT stdNIC CHECK(NIC LIKE '%[0-9]%[V-v]')
Example validated on db<>fiddle<>example

How to create CHECK constraints in Informix?

I need to create validations in my fields (columns) in Informix tables. Inside SQL Server, the names are CHECK (for example: CHECK (Age>=18))
How to create in Informix, or, what's the similar syntax in Informix?
If you want add check constraint you could do it in two ways:
1) The next example adds a new unit_price column to the items table and includes a check constraint to ensure that the entered value is greater than 0:
ALTER TABLE items
ADD (unit_price MONEY (6,2) CHECK (unit_price > 0));
2) To create a constraint that checks values in more than one column, use the ADD CONSTRAINT clause. The following example builds a constraint on the column that was added in the previous example. The check constraint now spans two columns in the table.
ALTER TABLE items ADD CONSTRAINT CHECK (unit_price < total_price);
Have a look at the doc

INSERTED NULL into Date and now cannot update

SQL Server 2014 issue. I created a table which has two DATE columns with DATE datatypes. One is populated the other is a future event. I created a constraint that date1 < date2. I inserted into the table putting NULL into date2 because it is future. I cannot update anything in the table. When trying to update date2 with date, I get Operand type clash: int is incompatible with date. I tried entering date with and without apostrophes in ever way I could think of. I cannot drop or alter the column because of the constraint I added. HELP. Please be specific about the SQL syntax needed for altering or updating to fix.
Change the constraint! It is never true -- either false or NULL. So, remove the constraint you have and do something like:
alter table t add constraint chk_t_date1_date2 check ( (date1 < date2) or date2 is null);
To drop the constraint, you do:
alter table t drop constraint <constraint name>;
You need to know the name of the constraint, which you can get from information_schema.table_constraints.
You should use single quotes '2019-04-18' with the ' before and after.

PL/SQL constraint: Always one record in a table

Im trying to add a constraint to a table so that there can only be one record in the table.
This is the code I already have:
ALTER TABLE CONFIG
ADD CONSTRAINT always_one
CHECK (count(*)= 1);
And this is the error I'm getting
ALTER TABLE CONFIG
ADD CONSTRAINT always_one CHECK (count(*)= 1)
Error report -
SQL Error: ORA-00934: group function is not allowed here
00934. 00000 - "group function is not allowed here"
*Cause:
*Action:
How does this work?
You can use already proposed solution with adding unique constraint on column
alter table config add constraint always_one check (pk_col=1);
this however allows inserting more than one row in case pk_col is null in second inserted row. So you need to handle this by adding a NOT NULL constraint as well
ALTER TABLE config
ADD CONSTRAINT notnulc CHECK (pk_col IS NOT NULL) ;
To prevent deleting this row, you should probably create before delete trigger as follows
create or replace trigger trg_ONLYONE before delete ON CONFIG
DECLARE
C NUMBER;
BEGIN
SELECT COUNT(*) INTO C FROM CONFIG;
if (C=1) THEN
RAISE_APPLICATION_ERROR (-20011, 'TOO FEW ROWS');
END IF;
END;
Futher options are: instead of check constraints mentioned above is CREATE BEFORE INSERT trigger, or instead of NOT NULL and UNIQUE CONSTRAINT make pk_col PRIMARY KEY
Just create a unique index on a column in the table, and add a constraint that the value of this column must be a certain value.
eg.
CREATE UNIQUE INDEX one_val ON config(pk_col);
ALTER TABLE CONFIG
ADD CONSTRAINT always_one
CHECK (pk_col = 1);
If all of your other columns could be any value, you may need to just add this additional column, and give it a default value.