我有两个带外键的表,我想在第一个表中按下外键,第二个表出现数据

Posted

技术标签:

【中文标题】我有两个带外键的表,我想在第一个表中按下外键,第二个表出现数据【英文标题】:i have two table with foreign key and i want to press in foreign key in first table and the second table appear data 【发布时间】:2020-01-08 08:58:22 【问题描述】:

我有两个街区。第一个是向导,第二个是 Oracle Forms 11g 中的手动与关系。

我将数据执行到第一个块中,我想在第一个表中按下外键,第二个表出现由相同数字外键链接在一起的数据?

请问我应该使用哪个触发器?我应该将哪些代码放入触发器?

【问题讨论】:

【参考方案1】:

您可以在Block1 的块级别使用WHEN-NEW-RECORD-INSTANCE 触发器和代码:

declare
 v_skulist  table1.skulist%type;
begin
 v_skulist := :Block1.f_skulist; --> represents left uppermost field
 go_block('Block2');
 execute_query;
 go_block('Block1'); --> go back to the upper block again, if don't want to come back, then starting from this line upto `end;`(exclusive) should be removed.
 while v_skulist != :Block1.f_skulist
 loop
  next_record;
 end loop;
end;

在哪里

Query Data Source Name 属性设置为 table1Block1

Query Data Source Name 属性设置为 myuser1.table2 WHERE Clause 设置为

skulist = :Block1.skulistBlock2 假设第二个表至少在另一个用户上

如您的评论中所述,已授予您当前用户的 select 权限。

这样,无论在第一个块中触及什么记录,对应的外键列都会被带到第二个块中。

【讨论】:

【参考方案2】:

您应该使用了数据块向导,它创建了所有必要的触发器和过程来处理它。

如果您要手动操作,那么……您可能不应该这样做,因为涉及的程序太多。

我建议您删除详细信息块并从头开始创建它,这次使用向导。注意它的要求 - 一旦你完成 - 表单会自动执行你想要的。

然后,您可以查看 Forms 为您创建的对象 - 如果您真的想手动完成,请尝试模仿其步骤。

【讨论】:

好的,如果数据库中的第二个块但它在另一个用户中,它将如何出现在我的用户中以将它与第一个块连接??? 如果您说第二个(详细)块的基础表属于另一个用户,那么您必须(至少)从该用户获取 SELECT 权限(参见 GRANT 语句)。然后,在您自己的架构中为其创建一个同义词,以便您可以在数据块向导中使用它。

以上是关于我有两个带外键的表,我想在第一个表中按下外键,第二个表出现数据的主要内容,如果未能解决你的问题,请参考以下文章

where 从具有列外键的表中查询

删除带外键的表foreign key constraint fails报错

sql 删除带外键约束的表的语句是啥

如何从具有两个外键的表中访问列?

MS Access:从没有外键的 2 个表中选择记录

当我从具有其他外键的表中删除一个条目时,相应的记录也不会被删除