表格:
FILM (Catalog_Num(pk), Format, Title, Year, Number_Discs, Rating, Timing, Genre)
INVENTORY (Film_ID(pk), Rental_Price, New, Date_In, Catalog_Num@, Store_Num@)
这是电影表的一部分,内容有些错误,例如:23W应该是23F,因为它的格式是 F 全屏。
CATALALOG_NUM FORMAT
------------- --------------------
16W Wide Screen
17F Full Screen
23W Full Screen
24F Full Screen
如果有错误,我必须更新胶片表中的内容。 这是我尝试过的:
update film
set catalog_num = REPLACE(catalog_num,substr(catalog_num, -1, 1),substr(format, 1,1))
我认为是将catalog_num列中的所有最后一个字符直接替换为format列中的第一个字符。 但是,由于这两个表之间有外键,因此出现错误:
ERROR at line 1:
ORA-02292: integrity constraint (SYS.INVENTORY_CATALOG_FK) violated - child record found
是否有任何解决方案可在一个查询中解决此问题,并且不需要使用级联或禁用约束? 谢谢!
答案 0 :(得分:0)
哦,使用自动生成的外键的 not 麻烦!您的VBA
应该不包含“真实”信息。它应该只是一个引用新值的数字。
您还选择了唯一(或少数几个)不支持级联约束更新的数据库。
我的建议是修复您的数据模型。
您可能要创建具有以下特征的新表:
Set web = CreateObject("WinHttp.WinHttpRequest.5.1")
web.Open "GET", "/api/list/", False
web.SetRequestHeader "Authorization", "Bearer <JWT_TOKEN_HERE>"
web.Send
有一个catalog_num
列,该列唯一地标识了每一行而已。它可以自动生成为串行列,也可以使用触发器分配,具体取决于您的Oracle版本。Films
的格式应为一列。哦,您已经知道了,并且已经了解了存储冗余数据的问题。film_id
应该有一个Films
列,而根本没有Inventory
列。 您也可以适当地进行这些更改。但是,最佳方法取决于您的Oracle版本,是否需要保留当前表以及其他因素。