我正在尝试执行此hsql查询,但我得到了execetion,因为PATIENTVISIT中的'SYMPTOMS'是Array Varchar()类型,其中表SYMPTOMS中的'SYMPTOM_NAME'是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)]
如何解决此问题或解决方法是什么?
答案 0 :(得分:0)
您只希望将SYSMPTOM_NAME列中的值用作PATIENTVISIT中数组的元素。只允许识别的SYMPTOM_NAME值作为有效症状。
无法使用FOREIGN KEY定义此类约束。
您可以在PATIENTVISIT表上使用TRIGGER来检查数组中所有元素与SYMPTOMS表中的元素,如果存在无法识别的值,则抛出异常。
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