检查oracle表单多记录块中的重复值

时间:2018-03-05 00:58:52

标签: oracle11g oracleforms

如果我插入的记录已经是多记录块中的一条记录,我想要移动到下一行时显示警告。

enter image description here

我必须把它放在什么触发器上?

1 个答案:

答案 0 :(得分:2)

您可以使用多种选项。

一个是输入 POST 值(在WHEN-NEW-RECORD-INSTANCE中)触发器。它会,发布到目前为止您输入的所有内容。然后,您可以从该表中编写using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Xml; using System.Xml.Linq; namespace ConsoleApplication1 { class Program { const string URL = @"https://www.w3schools.com/xml/cd_catalog.xml"; static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add("TITLE", typeof(string)); dt.Columns.Add("ARTIST", typeof(string)); dt.Columns.Add("COUNTRY", typeof(string)); dt.Columns.Add("COMPANY", typeof(string)); dt.Columns.Add("PRICE", typeof(decimal)); dt.Columns.Add("YEAR", typeof(int)); XDocument doc = XDocument.Load(URL); foreach (XElement cd in doc.Descendants("CD")) { dt.Rows.Add(new object[] { (string)cd.Element("TITLE"), (string)cd.Element("ARTIST"), (string)cd.Element("COUNTRY"), (string)cd.Element("COMPANY"), (decimal)cd.Element("PRICE"), (int)cd.Element("YEAR") }); } string[] titles = dt.AsEnumerable().Select(x => x.Field<string>("TITLE")).ToArray(); } } } WHEN-VALIDATE-ITEM触发器,并检查此类值是否已存在。或者,如果那些(那些)列上有SELECTs,数据库将自己完成其工作,即引发异常。

另一种选择是通过块中的所有行逐字地循环,并将第一行的值与所有其他行进行比较,然后将第二行的值与所有其他值进行比较,然后将第二行的值与所有其他值进行比较等等。

或者,您可以使用记录组(通常用于值列表)。基本上,您要检查您输入的值是否存在于记录组中。更多信息以及FMB文件,Craig's blog

或者,您可以使用计算的商品,如enter link description here所述(FMB附件)。

正如你所看到的,有很多方法可以做到这一点;探索每一个并选择你认为最有用/最有吸引力/易于实施的那个。