簡體   English   中英

如何允許oracle表列在列中具有多個行,但僅具有相同的值。 使用約束

[英]How to allow oracle table column to have multiple rows in column but sames values only. Using 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 !!!!

    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 !!!!!!

如果我正確理解了您的要求,則可以在插入觸發器之前使用。 檢查表中存在的值,如果新值與表值匹配或表中沒有數據,則僅允許插入。

這是有關觸發器的鏈接http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm

UPDATE

基於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>

NO_DATA_FOUND異常將忽略第一個插入,因為在此之前將沒有行。

現在,讓我們測試INSERT語句:

情況1

SQL> INSERT INTO TEST VALUES (1);

1 row created.

SQL>
SQL> INSERT INTO TEST VALUES (1);

1 row created.

SQL>
SQL> INSERT INTO TEST VALUES (2);
INSERT INTO TEST VALUES (2)
            *
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>

案例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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM