如何通过外键将Table A的NUMBER值传入Table B?含Oracle APEX场景
外键关联下表间数据传递逻辑与SQL实现
一、普通数据库场景(无Oracle APEX)
核心逻辑
通过TABLE B的外键A_ID关联TABLE A的ID字段,以此为纽带将TABLE A的NUMBER值同步到TABLE B的ENTERED_NUMBER字段,分为更新已有数据和插入新数据两种场景:
1. 更新TABLE B已有数据
UPDATE TABLE B SET ENTERED_NUMBER = (SELECT NUMBER FROM TABLE A WHERE TABLE A.ID = TABLE B.A_ID) WHERE EXISTS (SELECT 1 FROM TABLE A WHERE TABLE A.ID = TABLE B.A_ID);
- 用
EXISTS子句过滤掉TABLE B中无对应TABLE A记录的行,避免ENTERED_NUMBER被设置为NULL。
2. 插入新数据到TABLE B时同步值
单条插入(指定A表ID)
INSERT INTO TABLE B (A_ID, ENTERED_NUMBER) SELECT ID, NUMBER FROM TABLE A WHERE ID = 123; -- 替换为实际的A表ID值
批量插入
INSERT INTO TABLE B (A_ID, ENTERED_NUMBER) SELECT ID, NUMBER FROM TABLE A;
二、Oracle APEX场景(页面2对应TABLE A,页面3对应TABLE B)
APEX中可直接引用页面项(如:P2_NUMBER、:P3_A_ID)的值,结合页面间参数传递实现数据同步:
1. 页面3提交时写入TABLE B
插入新记录
INSERT INTO TABLE B (A_ID, ENTERED_NUMBER) VALUES (:P3_A_ID, :P2_NUMBER);
- 需确保页面2跳转至页面3时,已将
:P2_ID传递给:P3_A_ID(可在页面2的跳转按钮中设置参数传递)。
更新已有记录
UPDATE TABLE B SET ENTERED_NUMBER = :P2_NUMBER WHERE A_ID = :P3_A_ID;
2. 页面3加载时自动填充字段
无需编写SQL,直接在APEX页面设计中设置P3_ENTERED_NUMBER的默认值为:P2_NUMBER,并确保页面跳转时传递P2_NUMBER参数(或依赖APEX会话保留该值)。
内容的提问来源于stack exchange,提问作者Omatayo Holder
相关产品推荐
相关产品推荐

