【问题标题】:Oracle Apex: How do I tell Apex to use the value from a column of another table?Oracle Apex:如何告诉 Apex 使用另一个表的列中的值?
【发布时间】:2015-04-08 22:11:11
【问题描述】:

首先,我们没有使用代码。我们正在使用 Apex GUI 来设置数据库。我需要一个表的列从另一个表的列中获取值。如果它是我必须创建的触发器,那么它可能需要代码。

例如,我有一个“客户”表,其中“成员”列下指示了是或否。

每当为表“订单”输入新数据行时,我希望也有一个“成员”列的表“订单”自动从表“客户”的“成员”列中获取值。

我是否在“约束”下这样做,因为当我尝试创建成员列的外键时,它一直给我一个错误。

我会在“触发器”下这样做吗?

请理解,我不太了解代码。当有人说类似

COMMAND 表1 s ( 不管是什么命令 );

我不知道“s”是什么意思。而且我很确定还有很多其他的东西我也不太明白。我已经了解了 MySQL,但它显然与 Apex Oracle 有一些不同。

谢谢。

【问题讨论】:

  • 您应该详细说明为什么要将这个标志从客户复制到订单。为什么要这样做?订单(可能)与客户相关联,因此(不一定)复制该字段没有意义。开始复制数据通常是个坏主意,在混合触发器时更糟。

标签: oracle oracle-apex


【解决方案1】:

触发器是一种方法。假设order 表包含一个customer_id 列或标识客户的类似内容,您将创建一个插入前的for-each-row 触发器,其中包含如下语句:

SELECT customer.member INTO :new.member
FROM customer WHERE customer.customer_id = :new.customer_id

坦率地说,如果这是您想做的事情,您需要阅读一些资料来学习如何编写正确的触发器。

假设您将构建一个 Apex 应用程序来输入订单,另一种方法是让相关页面在加载时从 customer 查询必要的信息(可能是隐藏的页面项目),然后将它们包含在插入语句中.

同样,如果您不知道如何执行此操作,如果您打算使用 Apex 完成任何有用的事情,则需要进行一些研究。

这里的外键不合适。外键引用的列必须是唯一的;因为member只有两个值,很多客户会有相同的值,所以不是唯一的字段。

但是,外键适用于order 中标识特定客户的字段。

【讨论】:

    【解决方案2】:

    您需要主-详细信息页面。按Create page -> Form -> Master Detail Form,然后选择:

    • 步骤 Master Table and Columns: Table/View name - customer, Select Columns - 选择用户将编辑的表 customer 的所需列。
    • 步骤Detail Table and Columns: Table / View Name - order, Select Columns - 选择表order的所需列。
    • 步骤Define Primary Key:为两个表选择主键(或使用选项Managed by ROWID)
    • 步骤Primary Key - 我建议使用之前创建的序列(转到Object Browser)。

    在所有其他步骤中,您可以默认选择值。在此步骤之后,您将拥有两页(或三页,具体取决于您在向导中选择的内容)。一页允许用户更改表customer中的数据,第二页允许用户更改表order中的数据,该数据将自动与表customer链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2011-01-08
      • 2023-03-26
      相关资源
      最近更新 更多