有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在数组数据类型的元素上添加外键约束

我正在尝试执行此hsql查询,但由于PATIENTVISIT中的“症状”类型为Array Varchar(),而表SYMPTOMS中的“症状名称”类型为varchr():

 ALTER TABLE PATIENTVISIT ADD CONSTRAINT IF NOT EXISTS 
 PATIENTVISIT_SYMPTOMS_FK FOREIGN KEY (SYMPTOMS) REFERENCES SYMPTOMS(SYMPTOM_NAME);

我得到的例外是:

 java.sql.SQLSyntaxErrorException: incompatible data types in combination in statement [ALTER TABLE PATIENTVISIT ADD CONSTRAINT IF NOT EXISTS PATIENTVISIT_SYMPTOMS_FK FOREIGN KEY (SYMPTOMS) REFERENCES SYMPTOMS(SYMPTOM_NAME)]

如何解决此问题或解决方法是什么


共 (1) 个答案

  1. # 1 楼答案

    您只希望SYSMPTOM_NAME列中的值用作PATIENTVISIT中数组的元素。仅允许识别的症状名称值作为有效症状

    无法使用外键定义此类型的约束

    您可以在PATIENTVISIT表上使用触发器,根据症状表中的元素检查数组的所有元素,如果存在无法识别的值,则引发异常

    CREATE TRIGGER CHECK_VALUES BEFORE INSERT ON PATIENTVISIT REFERENCING NEW  ROW AS NEWROW FOR EACH ROW 
    BEGIN ATOMIC
     IF EXISTS (SELECT TRUE FROM UNNEST (NEWROW.SYMPTOMS) X(A) LEFT JOIN SYMPTOMS ON X.A = SYMPTOMS.SYMPTOM_NAME WHERE SYMPTOMS.SYMPTOM_NAME IS NULL)
      THEN
        SIGNAL SQLSTATE '45000';
      END IF;
    END