Sql 如何允许oracle表列在列中有多行,但值仅相同。使用约束
如何允许oracle表列在列中有多行,但仅具有相同的值Sql 如何允许oracle表列在列中有多行,但值仅相同。使用约束,sql,oracle,constraints,Sql,Oracle,Constraints,如何允许oracle表列在列中有多行,但仅具有相同的值 Create Table test ( col int); case - I insert into test values (1); --should work insert into test values (1); --should work insert into test values (2); --Should throw error !!!! cas
Create Table test ( col int);
case - I
insert into test values (1);
--should work
insert into test values (1);
--should work
insert into test values (2);
--Should throw error !!!!
case - II
truncate table test;
insert into test values (2);
--should work
insert into test values (2);
--Should work
insert into test values (1);
--Should throw error !!!!!!
更新 根据OP的两个案例,我认为插入触发器之前的可以完成以下任务: 测试用例:
SQL> DROP TABLE TEST PURGE;
Table dropped.
SQL>
SQL> CREATE TABLE test
2 ( col INT
3 );
Table created.
SQL>
SQL> CREATE OR REPLACE TRIGGER trg BEFORE
2 INSERT ON TEST FOR EACH ROW DECLARE ID NUMBER;
3 BEGIN
4 BEGIN
5 SELECT DISTINCT col INTO ID FROM TEST;
6 EXCEPTION
7 WHEN no_data_found THEN
8 NULL;
9 END;
10 IF :NEW.col <> id THEN
11 RAISE_APPLICATION_ERROR(-20001, 'Cannot Insert different value in the table');
12 END IF;
13 END;
14 /
Trigger created.
SQL>
案例2
SQL> TRUNCATE TABLE TEST;
Table truncated.
SQL>
SQL> INSERT INTO TEST VALUES (2);
1 row created.
SQL>
SQL> INSERT INTO TEST VALUES (2);
1 row created.
SQL>
SQL> INSERT INTO TEST VALUES (1);
INSERT INTO TEST VALUES (1)
*
ERROR at line 1:
ORA-20001: Cannot Insert different value in the table
ORA-06512: at "LALIT.TRG", line 10
ORA-04088: error during execution of trigger 'LALIT.TRG'
SQL>
如果我正确理解了您的要求,您可以在插入触发器之前使用。检查表中的值,如果新值与表值匹配或表中没有数据,则只允许插入 这是关于触发器的链接
您可以对此使用检查约束。。我不认为有限制就可以做到。我以前从未见过需要这种解决方案的问题-你确定你已经正确地建模了吗?我认为插入前触发器可以完成这项工作。我已经更新了我的答案。嘿,Lalit,这违反了案例二。@touchchandra,请看我答案中的更新。我想这就是你需要的。它处理了这两种情况。
SQL> TRUNCATE TABLE TEST;
Table truncated.
SQL>
SQL> INSERT INTO TEST VALUES (2);
1 row created.
SQL>
SQL> INSERT INTO TEST VALUES (2);
1 row created.
SQL>
SQL> INSERT INTO TEST VALUES (1);
INSERT INTO TEST VALUES (1)
*
ERROR at line 1:
ORA-20001: Cannot Insert different value in the table
ORA-06512: at "LALIT.TRG", line 10
ORA-04088: error during execution of trigger 'LALIT.TRG'
SQL>