CN102289433B - 一种实现数据库触发器功能的方法及装置 - Google Patents
一种实现数据库触发器功能的方法及装置 Download PDFInfo
- Publication number
- CN102289433B CN102289433B CN201010202877.0A CN201010202877A CN102289433B CN 102289433 B CN102289433 B CN 102289433B CN 201010202877 A CN201010202877 A CN 201010202877A CN 102289433 B CN102289433 B CN 102289433B
- Authority
- CN
- China
- Prior art keywords
- trigger
- database
- file
- registration
- terminates
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种实现数据库触发器功能的方法及装置,所述方法包括以下步骤:注册表级触发器;当有文件需要加入数据库时,获取该文件需要加载的表记录,并将获取的表记录与数据库中的表记录进行对比;当获取的表记录发生变化时,数据库进行数据更新,根据注册的表级触发器,分发关于数据库中表发生变化的消息。本发明实现了以表为单位触发,通知应用模块数据库数据发生变化的功能。采用本发明的方法,丰富了数据库触发器功能,满足了表记触发的应用要求,节省了数据库处理触发器的时间,提高了前台的数据实时同步的效率。
Description
技术领域
本发明涉及通讯技术领域,特别是涉及一种实现数据库触发器功能的方法及装置。
背景技术
数据库中的触发器,是一种提高嵌入式系统执行效率的存储过程。在嵌入式数据库中,当数据发生变化的时候,不论是对数据进行增加、删除,还是修改,都需要通知应用,通知其关心的数据发生了改变,以及具体改变的内容。触发器的作用就是提高系统的实时性,增强系统对外部数据的同步功能。
嵌入式数据库触发器的具体实现,以及模块之间的协作关系,数据的处理流程,如附图1所示。其中,触发器注册模块,是用来注册触发器,提供有触发器注册结构,注册方式等;触发器检测模块,根据注册的表的触发器,按照一定的解析方式获取表记录,取出需要进行触发的表的记录内容;解析模块,取出需要进行检查的表内容之后,负责辨别表是否发生变化,将新数据与老数据按照某种算法进行对比检查;消息通知模块,如果发生变化就要使用消息分发模块,根据注册触发器寻找调用应用注册的存储过程,实现应用的消息分发。
目前,触发器可以检测到的最小的处理单元是字段,实现有记录和字段级的触发,当有注册的数据发生变化的时候,数据库就会触发通知应用。当注册的级别是记录级的时候,有一条记录发生变化,就会通知应用一次,这就是记录级触发。当注册的是字段级的时候,如果注册的字段中的一个字段发生变化,就会通知相应的应用,但是还是以一条记录为检查单元。如果表的记录条数很多,修改的对象又是针对表的,表的很多条记录都发生了变化,那么就会产生很多次的触发。
如果应用需要知道表的变化,首先需要注册一个记录或者字段级的触发器,那么它将会在每条记录发生变化的时候都触发,它只能确定表的一条记录发生了变化,不能确定在一次流程当中,一张表的所有记录变化完成的时间点,不能分清一张表的上一次与下一次操作。这样的触发器无法实现表级触发需求,所谓的表级触发,就是在一次操作中,当流程结束的时候,应用只需要知道它所关心的表是否变化,而且只需要在流程结束的时候通知它表变化了或者表操作完成了,应用接收到一次触发消息就可以了。
另外,数据库作为一个嵌入式系统的底层模块,在设计上要考虑效率问题,然而目前触发器的这种做法,在很大程度上就降低了数据库的效率。当一张表存在的记录比较多的时候,由于需要重复触发,会大量占用数据库进程的时间,降低数据库的实时操作性能。
发明内容
本发明要解决的技术问题是提供一种实现数据库触发器功能的方法及装置,用以解决现有技术中不能以表为单位通知应用模块数据库数据变化的问题。
为解决上述技术问题,一方面,本发明提供一种实现数据库触发器功能的方法,所述方法包括以下步骤:
注册表级触发器;在注册表级触发器时,注册具体的触发时间点,注册为以下三种情况中的一种:A),Process_Unit:在整个流程操作结束,统一处理应用触发;B),File_Unit:以一个文件为单位,在文件操作结束后,统一处理应用触发;C),Table_Unit:以表为单位,当一个表操作结束后,统一处理应用触发;
当有文件需要加入数据库时,获取该文件需要加载的表记录,并将获取的表记录与数据库中的表记录进行对比;
当获取的表记录发生变化时,数据库进行数据更新,根据注册的表级触发器,分发关于数据库中表发生变化的消息。
进一步,在注册表级触发器时,如果注册的触发时间点为在整个流程操作结束后,统一处理触发,则在整个流程操作结束之后,统一分发关于数据库中所涉及的表发生变化的消息。
进一步,在注册表级触发器时,如果注册的触发时间点为在文件结束操作结束后,统一处理触发,则在该文件操作结束之后,统一分发数据库中关于该文件涉及的表发生变化的消息。
进一步,在注册表级触发器时,如果注册的触发时间点为在表操作结束后,统一处理触发,则在该表操作结束之后,统一分发数据库中关于该表发生变化的消息。
进一步,当获取的表记录发生变化时,在数据库进行数据更新时,还包括以下步骤:
判断是否注册了字段级触发器,如果是,则触发字段级触发器;如果否,则进一步判断是否注册了记录级触发器,如果是,则触发记录级触发器,如果否,则根据注册的表级触发器,分发关于数据库中表发生变化的消息。
另一方面,本发明还提供一种实现数据库触发器功能的装置,所述装置包括:
注册单元,用于注册表级触发器;在注册表级触发器时,注册具体的触发时间点,注册为以下三种情况中的一种:A),Process_Unit:在整个流程操作结束,统一处理应用触发;B),File_Unit:以一个文件为单位,在文件操作结束后,统一处理应用触发;C),Table_Unit:以表为单位,当一个表操作结束后,统一处理应用触发;
对比单元,用于当有文件需要加入数据库时,获取该文件需要加载的表记录,并将获取的表记录与数据库中的表记录进行对比;
消息分发单元,用于当获取的表记录发生变化时,数据库进行数据更新,根据注册的表级触发器,分发关于数据库中表发生变化的消息。
进一步,在所述注册单元注册表级触发器时,如果注册的触发时间点为在整个流程操作结束后,统一处理触发,则所述消息分发单元在整个流程操作结束之后,统一分发关于数据库中所涉及的表发生变化的消息。
进一步,在所述注册单元注册表级触发器时,如果注册的触发时间点为在文件结束操作结束后,统一处理触发,则所述消息分发单元在该文件操作结束之后,统一分发数据库中关于该文件所涉及的表发生变化的消息。
进一步,在所述注册单元注册表级触发器时,如果注册的触发时间点为在表操作结束后,统一处理触发,则所述消息分发单元在该表操作结束之后,统一分发数据库中关于该表发生变化的消息。
进一步,所述装置还包括:
判断处理单元,用于当获取的表记录发生变化时,在数据库数据更新时,判断是否注册了字段级触发器,如果是,则触发字段级触发器;如果否,则进一步判断是否注册了记录级触发器,如果是,则触发记录级触发器,如果否,则根据注册的表级触发器,由所述消息分发单元分发关于数据库中表发生变化的消息。
本发明有益效果如下:
本发明实现了以表为单位触发,通知应用模块数据库数据发生变化的功能。采用本发明的方法,丰富了数据库触发器功能,满足了表记触发的应用要求,节省了数据库处理触发器的时间,提高了前台的数据实时同步的效率。
附图说明
图1是先有技术中触发器单元结构示意图;
图2是本发明实施例中一种实现数据库触发器功能的方法的流程图;
图3是本发明实施例中再一种实现数据库触发器功能的方法的流程图;
图4是本发明实施例中一种实现数据库触发器功能的方法中文件解析步骤的流程图;
图5是本发明实施例中一种实现数据库触发器功能的方法中多类型触发的处理流程图;
图6是本发明实施例中一种实现数据库触发器功能的方法中表级触发与其它类型触发器共存时的处理流程图;
图7是本发明实施例中一种实现数据库触发器功能的装置的结构示意图。
具体实施方式
为了解决现有技术中不能以表为单位通知应用模块数据库数据变化的问题,本发明提供了一种实现数据库触发器功能的方法及装置,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
如图2所示,本发明实施例涉及一种实现数据库触发器功能的方法,包括以下步骤:
步骤S101,注册表级触发器。
应用注册一个表级触发器,注册触发器包含后续消息触发需要通知的具体应用标识,以及需要触发的表标识等。注册触发器必须包括的结构成员如下:
1)触发类型:表级触发;
2)触发对象:
3)表标识,用来表示需要触发通知的具体的表,可以唯一的表示一张表;
4)触发时间点:由于数据库中的一些表需要用外部数据整体替换,或者表中的一些记录需要部分替换完成更新。外部文件可以是一个文件,也可以是多个文件,文件中可以包含多张表或者一张表。因此,在触发时间点上,就存在三种情况:即:每张表更新完触发,每个文件更新完触发,以及所有文件更新完触发(即:整个流程操作结束后触发)。因此,在注册表级触发器时,需要注册具体的触发时间点,即:注册为以下三种情况中的一种:
A),Process_Unit:在整个流程(可能是多个文件集合)操作结束,统一处理应用触发;
B),File_Unit:以一个文件(可能是多表文件,也可能是单表文件)为单位,在文件操作结束后,统一处理应用触发;
C),Table_Unit:以表为单位,当一个表操作结束后,统一处理应用触发;
5)触发通知对象:被通知的应用,通过设置应用标识(用来唯一标识被通知对象)实现。
另外,还需要对注册内容进行校验,校验表标识的正确性,检验触发类型,校验结构是否正确。在产生表级触发的时候,会有一个具体标识位用来告诉数据库,下面的操作是否需要执行表级触发的检查操作。
步骤S102,当有文件需要加入数据库时,获取该文件需要加载的表记录,并将获取的表记录与数据库中的表记录进行对比。
当数据库中的一些表需要用外部数据整体替换,或者表中的一些记录需要部分替换,进行数据更新时,这些进行数据替换的XML文件就是需要加入数据库的文件。这些用来替换数据库中相关表中全部或者部分数据的文件,可以是一个文件,也可以是多个文件,文件中可以包含多张表,也可以只有一张表。
解析文件的时候,获取表开始和结束的标识,根据注册的触发器结构,查询是否注册了表级触发器,如果注册了,设置对比标识Compare_Flag,用来判定是否需要将解析的数据与目前据库中的表记录进行比较。在需要解析的文件比较大的时候,可以采用以表为单位分阶段解析的方式。
步骤S103,当获取的表记录发生变化时,数据库进行数据更新,根据注册的表级触发器,分发关于数据库中表发生变化的消息。
当设置了Compare_Flag对比标识,将获取到的所有的表记录,与数据库内存中的表记录进行比对,执行文件写入操作,即进行数据库的数据更新。等写入操作执行完成之后,根据注册的表级触发器,进行触发,注册的触发器信息检索需要通知的被通知应用。即,当注册的触发时间点是Table_Unit时,则在每一张表更新完之后,进行触发,将变化的表标识通知给相应的应用模块,完成消息分发。当注册的触发时间点是File_Unit时,则在每个文件更新完之后,进行触发,将该文件涉及到的变化的表标识通知给相应的应用模块,完成消息分发。当注册的触发时间点是Process_Unit时,则在整个流程完成数据更新后,将该流程涉及到的变化的表标识通知给相应的应用模块,完成消息分发。
上述步骤中,实现表级触发执行的条件是:将一个包含了很多个表的XML(Extensible Markup Language,可扩展标记语言)文件全部加入数据库成功的时候,需要将XML文件中的表的内容与数据库当前的此表内容进行比对,如果表内容发生了变化,在将所有的表加载完成的时候,需要给一些应用模块回复触发消息。
为更加清楚的描述实现数据库表级触发器功能的方法,如图3所示,本发明实施例涉及一种实现数据库触发器功能的方法,包括以下步骤:
步骤S201,开始。
步骤S202,注册表级触发器,本步骤与上述方法的步骤S101相同,本步骤则不再详细描述。
步骤S203,判断注册的触发器是否合法,通过校验表标识的正确性,检验触发类型,校验结构是否正确来进行判断;如果合法,则转步骤S204;如果不合法,则转步骤S208。
步骤S204,进一步判断是否有文件加入数据库,即判断数控库是否需要进行数据更新,如果是,则转步骤S205;如果否,则表明目前数据库不需要进行数据更新,需要继续判断是否有文件加入数据库,直到有文件需要加入数据库。
步骤S205,从需要加入数据库的文件中获取需要加载的表记录,并将获取的表记录与数据库中的表记录进行对比。
本步骤需要对加入数据库的文件进行解析,解析的具体步骤如图4所示,包括以下步骤:
步骤S2051,对加入数据库的文件进行解析,获取其包含的表标识;
步骤S2052,判断表标识是否注册了表级触发器,如果是,则转步骤S2053,如果否,则转步骤S2054;
步骤S2053,设置需要将解析的表记录与目前据库中的表记录进行比对的对比标识Compare_Flag;
步骤S2054,获取表的所有记录。
步骤S206,在将获取的表记录与数据库中的表记录进行对比之后,判断获取的表记录,相对于数据库中的表记录,是否发生了变化,如果比对之后,发现表有变化,进一步判断此表是否已经设置了表变化标识,如果已经设置,则跳过检查;如果没有,则设置表变化标识,转步骤S207;如果发现没有变化,则不执行触发,转步骤S204。
步骤S207,查询注册触发器结构,获取需要应答的业务,分发消息。
本步骤具体包括以下步骤:
如果注册的是Process_Unit,检查到表已经发生了变化的时候,将此触发结构插入流程结束触发队列,对再次读入的文件中是此表标识的就不再继续检查,直接跳过。如果没有发生变化,就对读入的表继续检查,如果一直没有,那么就要一直检查持续到流程结束。
如果注册的是File_Unit,检查到表已经发生了变化的时候,将此触发结构插入文件结束触发队列。对再次读入的本文件中是此表标识的就不再继续检查,直接跳过。如果没有发生变化,就对读入的表继续检查,如果一直没有,那么检查只是持续到本文件结束。在下一个读入的文件,重新检查,是否需要触发。
如果注册的是Table_Unit,将读入的文件,发现注册表变化的时候,将此触发结构插入表结束触发队列,触发通知执行。
表的变化标示可以作为以后是否需要检查的判断依据,如果发现设置了标识就不需要对比了,如果没有,就还需要对比。当表很多的时候,通过设置比特位来表示每一个表的变化情况,在每一次流程结束的时候,清除标志。将变化的表消息插入表级触发生成的队列,插入队列的消息包含注册表级触发器结构,以及表的变换状态;
等表操作结束之后,遍历表级触发生成的队列,当注册的类型是表操作结束就触发,就执行回调函数,统一分发数据库中关于该表发生变化的消息;在文件结束之后,遍历生成的文件触发器队列,当注册的类型是文件操作结束就触发时,就执行回调函数,统一分发数据库中关于该文件涉及的表发生变化的消息;在流程结束之后,遍历生成的流程触发器队列,当注册的类型是流程操作结束就触发,就执行回调函数,统一分发关于数据库中所涉及的表发生变化的消息。
步骤S208,结束。
在上述方法中,可以注册多种触发类型,即可以注册不同的触发时间点,如图5所示,具体步骤如下(与上述步骤相同或相似的步骤,则不再详细描述):
步骤S301,开始;
步骤S302,在注册表级触发器之后,当有文件需要加入数据库时,对文件进行解析,判断是否设置了对比标识,如果是,则转步骤S303,如果否,则转步骤S313;
步骤S303,将解析获取的表记录与数据库中的表记录进行对比;
步骤S304,判断表是否有变化,如果有,则转步骤S305;如果没有,则转步骤S313;
步骤S305,判断注册的触发时间点是否为表操作结束触发,如果是,则转步骤S306;如果否,则转步骤S307;
步骤S306,表操作结束之后,遍历表级触发生成的队列,进行触发,统一分发数据库中关于该表发生变化的消息;
步骤S307,设置表变化的标志;
步骤S308,文件操作完成之后,即本文件的数据在数据库更新之后,检测文件触发器队列,即判断文件触发器队列中是否有数据;
步骤S309,判断注册的触发时间点是否为文件操作结束后触发,如果是,则转步骤S311,如果否,则转步骤S310;
步骤S310,流程操作完成之后,即所有文件的数据在数据库更新之后,检测流程触发器队列,即判断流程触发器队列中是否有数据;
步骤S311,执行回调函数,统一分发数据库中涉及的表发生变化的消息;
步骤S312,判断注册的触发时间点是否为流程操作结束后触发,如果是,则转步骤S311,如果否,就说明没有注册表级触发器,则转步骤S313;
步骤S313,结束。
另外,上述实施例涉及的实现数据库表级触发器功能的方法,还可以与字段级触发和记录级触发共存,即:一张表如果注册了表级触发,也可以注册记录级和字段级,这是可以并存的。当注册的触发类型共存的时候,表级触发与其他的触发类型在触发的时候互不影响,会同时生成表级触发和其他的触发。如图6所示,实现表级触发与其它类型触发器共存的处理步骤如下(与上述步骤相同或相似的步骤,则不再详细描述):
步骤S401,开始;
步骤S402,在注册表级触发器之后,当有文件需要加入数据库时,对文件进行解析,及进行对比之后,判断注册的表的记录是否发生了变化。如果是,则转步骤S403,如果否,则重复本步骤,等待下一个需要加入数据库的文件;
步骤S403,判断是否注册了字段级的触发器,如果是,则转步骤S404,如果否,则转步骤S405;
步骤S404,触发字段级的触发器,即:在注册的字段中的一个字段发生变化后,就会通知相应的应用,但是还是以一条记录为检查单元。
步骤S405,判断是否注册了记录级的触发器,如果是,则转步骤S406,如果否,则转步骤S407;
步骤S406,触发记录级的触发器,即:当注册的数据中,有一条记录发生变化,就会通知应用一次;
步骤S407,判断是否注册了表级触发器,如果是,则转步骤S408,如果否,则转步骤S402;
步骤S408,进行表级触发处理,具体步骤如前描述,本步骤不再详细描述;
步骤S409,结束。
下面,以两个具体实例进行详细说明:
第一个实例:只注册表级触发器的实例;
1)注册触发器,这里注册一种特殊情况,多个引用注册相同的表,但是要求不同的触发时机:
应用A注册了表级触发器triggera,注册内容:
触发类型:表级触发
触发对象:TableId;
触发时间点:Table_Unit
触发通知对象:A;
应用B注册了表级触发器triggerb,注册内容:
触发类型:表级触发
触发对象:TableId;
触发时间点:File_Unit
触发通知对象:B;
应用C注册了表级触发器triggerc,注册内容:
触发类型:表级触发
触发对象:TableId;
触发时间点:Process_Unit
触发通知对象:C;
发起的数据库操作流程,发起消息,包含的结构体必须声明:
文件个数:2个
文件名称:FileFirst
FileSecond
从外存需要写入数据库的承载数据的各个文件的内容,其中FileSecond和第一张表的格式相同:
FileFirst
/*第一张表*/
TableId
/*表内容*/
Begin
…
End:
/*第二张表*/
TableIdtwo:
/*表内容*/
Begin
…
End:
…
2)获取表TableId的内容,成功获取到第一个文件的一张表的记录内容,检查字表是否注册了表级触发器,获取到注册了triggera、triggerb和triggerc,就需要设置TableId表的Compare_Flag标识。
3)当表TableId操作完成之后,检查Compare_Flag标识,是否设置,如果设置了,与数据库内存中的本表TableId记录内容进行比较,如果发生了变化,将此信息triggera插入表结束触发器队列,triggerb插入文件结束触发器队列,triggerc插入队列结束触发器队列。
4)当表TableId操作完成之后,检查表结束触发队列,获取到triggera类型,通知应用A。清除表结束触发器队列。如果没有变化,就继续下一张表TableIdtwo的处理。
5)处理TableIdtwo的时候,首先检查是否注册了表级触发器,发现没有注册,于是执行写入数据库的操作,不记TableIdtwo的标志位Compare_Flag,继续处理。
6)当文件FileFirst解析完成之后,检查文件结束触发队列,获取到triggerb类型,数据库操作结束,通知应用B。清除文件结束触发器队列。
7)当文件FileSecond解析完成之后,检查文件结束触发队列,获取到triggerb类型,通知应用B。
8)流程结束之后,检查流程结束触发队列,获取到triggerc类型,通知应用C。
第二个实例:与其他触发器共存的实例。
1)注册触发器,注册有表级触发还有其他类型的触发器:
应用A注册了表级触发器triggera,注册内容:
触发类型:表级触发
触发对象:TableId;
触发时间点:Table_Unit
触发通知对象:A;
应用B注册了记录级触发器triggerb,注册内容:
触发类型:记录级触发
触发对象:TableId;
触发:INSERT
触发通知对象:B;
发起的数据库操作流程,发起消息,包含的结构体必须声明:
文件个数:1个
文件名称:FileFirst
从外存需要写入数据库的承载数据的各个文件的内容:
FileFirst
/*第一张表*/
TableId
/*表内容*/
Begin
…
Record1:XXX/*执行了一个INSERT插入操作*/
Record2:XXX/*执行了一个UPDATE删除操作*/
…
End:
2)获取表TableId的内容,成功获取到TableId的记录Record1内容,检查注册了的触发器,获取到注册了triggera表级触发器、triggerb记录级触发器。有表级触发器注册,设置TableId表的Compare_Flag标识。
3)获取一张表TableId的第一条记录Record1,正常处理记录级触发器,检测到是插入操作之后,产生插入记录级触发器队列。检查Compare_Flag标识置位。发现如果置位,就将触发信息插入表操作结束触发器队列,并且还需要告诉后面的记录检查不需要再检查此表的表级触发是否变化,设标志Table_Chaged_Flag。
4)当一张表TableId的第二条记录Record2操作完成之后,没有检查到注册其他记录级类型的触发器。发现设置了Table_Chaged_Flag标识,不再向表结束触发队列插入新的信息。
5)表处理结束,检查表结束处理触发队列。处理triggera,给应用A回消息。清除TableId的Table_Chaged_Flag标志。
6)当文件FileFirst解析完成之后,检查文件结束触发队列,没有文件结束触发队列存在。
7)流程结束之后,检查流程结束触发队列,没有流程触发器队列存在。
如图7所示,本发明实施例还涉及一种实现数据库触发器功能的装置,包括:
注册单元501,用于注册表级触发器;
对比单元502,用于当有文件需要加入数据库时,获取该文件需要加载的表记录,并将获取的表记录与数据库中的表记录进行对比;
消息分发单元503,用于当获取的表记录发生变化时,数据库进行数据更新,根据注册的表级触发器,分发关于数据库中表发生变化的消息。
判断处理单元504,用于当获取的表记录发生变化时,在数据库数据更新时,判断是否注册了字段级触发器,如果是,则触发字段级触发器;如果否,则进一步判断是否注册了记录级触发器,如果是,则触发记录级触发器,如果否,则根据注册的表级触发器,由消息分发单元503分发关于数据库中表发生变化的消息。
其中,在注册单元501注册表级触发器时,如果注册的触发时间点为在整个流程操作结束后,统一处理触发,则消息分发单元503在整个流程操作结束之后,统一分发关于数据库中所涉及的表发生变化的消息。
在注册单元501注册表级触发器时,如果注册的触发时间点为在文件结束操作结束后,统一处理触发,则消息分发单元503在该文件操作结束之后,统一分发数据库中关于该文件所涉及的表发生变化的消息。
在注册单元501注册表级触发器时,如果注册的触发时间点为在表操作结束后,统一处理触发,则消息分发单元503在该表操作结束之后,统一分发数据库中关于该表发生变化的消息。
由上述实施例可以看出,本发明本发明实现了以表为单位触发,通知应用模块数据库数据发生变化的功能。在操作流程结束的时候可以收到关心表的变化信息,进而可以确定表最终的变化时间点,避免了重复收到表变化的信息,提高了数据库的效率。采用本发明的方法,丰富了数据库触发器功能,满足了表记触发的应用要求,节省了数据库处理触发器的时间,提高了前台的数据实时同步的效率。
尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
Claims (2)
1.一种实现数据库触发器功能的方法,其特征在于,所述方法包括以下步骤:
注册表级触发器;在注册表级触发器时,注册具体的触发时间点,注册为以下三种情况中的一种:A),Process_Unit:在整个流程操作结束,统一处理应用触发;B),File_Unit:以一个文件为单位,在文件操作结束后,统一处理应用触发;C),Table_Unit:以表为单位,当一个表操作结束后,统一处理应用触发;
当有文件需要加入数据库时,获取该文件需要加载的表记录,并将获取的表记录与数据库中的表记录进行对比;
当获取的表记录发生变化时,数据库进行数据更新,根据注册的表级触发器,分发关于数据库中表发生变化的消息;
在数据库进行数据更新时,还包括以下步骤:
判断是否注册了字段级触发器,如果是,则触发字段级触发器;如果否,则进一步判断是否注册了记录级触发器,如果是,则触发记录级触发器,如果否,则根据注册的表级触发器,分发关于数据库中表发生变化的消息;
在注册表级触发器时,如果注册的触发时间点为在整个流程操作结束后,统一处理触发,则在整个流程操作结束之后,统一分发关于数据库中所涉及的表发生变化的消息;
在注册表级触发器时,如果注册的触发时间点为在文件结束操作结束后,统一处理触发,则在该文件操作结束之后,统一分发数据库中关于该文件涉及的表发生变化的消息;
在注册表级触发器时,如果注册的触发时间点为在表操作结束后,统一处理触发,则在该表操作结束之后,统一分发数据库中关于该表发生变化的消息。
2.一种实现数据库触发器功能的装置,其特征在于,所述装置包括:
注册单元,用于注册表级触发器;在注册表级触发器时,注册具体的触发时间点,注册为以下三种情况中的一种:A),Process_Unit:在整个流程操作结束,统一处理应用触发;B),File_Unit:以一个文件为单位,在文件操作结束后,统一处理应用触发;C),Table_Unit:以表为单位,当一个表操作结束后,统一处理应用触发;
对比单元,用于当有文件需要加入数据库时,获取该文件需要加载的表记录,并将获取的表记录与数据库中的表记录进行对比;
消息分发单元,用于当获取的表记录发生变化时,数据库进行数据更新,根据注册的表级触发器,分发关于数据库中表发生变化的消息;
判断处理单元,用于当获取的表记录发生变化时,在数据库数据更新时,判断是否注册了字段级触发器,如果是,则触发字段级触发器;如果否,则进一步判断是否注册了记录级触发器,如果是,则触发记录级触发器,如果否,则根据注册的表级触发器,由所述消息分发单元分发关于数据库中表发生变化的消息;
在所述注册单元注册表级触发器时,如果注册的触发时间点为在整个流程操作结束后,统一处理触发,则所述消息分发单元在整个流程操作结束之后,统一分发关于数据库中所涉及的表发生变化的消息;
在所述注册单元注册表级触发器时,如果注册的触发时间点为在文件结束操作结束后,统一处理触发,则所述消息分发单元在该文件操作结束之后,统一分发数据库中关于该文件所涉及的表发生变化的消息;
在所述注册单元注册表级触发器时,如果注册的触发时间点为在表操作结束后,统一处理触发,则所述消息分发单元在该表操作结束之后,统一分发数据库中关于该表发生变化的消息。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010202877.0A CN102289433B (zh) | 2010-06-18 | 2010-06-18 | 一种实现数据库触发器功能的方法及装置 |
PCT/CN2010/079621 WO2011157034A1 (zh) | 2010-06-18 | 2010-12-09 | 一种实现数据库触发器功能的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010202877.0A CN102289433B (zh) | 2010-06-18 | 2010-06-18 | 一种实现数据库触发器功能的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102289433A CN102289433A (zh) | 2011-12-21 |
CN102289433B true CN102289433B (zh) | 2015-03-25 |
Family
ID=45335873
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010202877.0A Expired - Fee Related CN102289433B (zh) | 2010-06-18 | 2010-06-18 | 一种实现数据库触发器功能的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102289433B (zh) |
WO (1) | WO2011157034A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662995B (zh) * | 2012-03-15 | 2015-09-30 | 播思通讯技术(北京)有限公司 | 一种快速定位手机应用数据更新的方法 |
CN112860740B (zh) * | 2019-11-27 | 2022-12-20 | 金篆信科有限责任公司 | 一种触发器实现的方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1673972A (zh) * | 2004-08-04 | 2005-09-28 | 上海宝信软件股份有限公司 | 数据库表更新的动态监控系统及方法 |
CN101770484A (zh) * | 2008-12-31 | 2010-07-07 | 北大方正集团有限公司 | 一种网站更新实时发布的方法及系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070011207A1 (en) * | 2005-07-05 | 2007-01-11 | Vishnubhotla Prasad R | Method and system for integrating file system events into a relational database |
CN101192214B (zh) * | 2006-11-27 | 2010-09-29 | 中兴通讯股份有限公司 | 用于内存数据库内容变化后实时通知业务的处理方法 |
CN101202934A (zh) * | 2006-12-13 | 2008-06-18 | 中兴通讯股份有限公司 | 用于内存数据库内容变化实时通知业务的处理装置 |
CN101582071A (zh) * | 2008-05-16 | 2009-11-18 | 鸿富锦精密工业(深圳)有限公司 | 数据更新系统及方法 |
-
2010
- 2010-06-18 CN CN201010202877.0A patent/CN102289433B/zh not_active Expired - Fee Related
- 2010-12-09 WO PCT/CN2010/079621 patent/WO2011157034A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1673972A (zh) * | 2004-08-04 | 2005-09-28 | 上海宝信软件股份有限公司 | 数据库表更新的动态监控系统及方法 |
CN101770484A (zh) * | 2008-12-31 | 2010-07-07 | 北大方正集团有限公司 | 一种网站更新实时发布的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2011157034A1 (zh) | 2011-12-22 |
CN102289433A (zh) | 2011-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106981024B (zh) | 一种交易限额计算处理系统及其处理方法 | |
CN103744745B (zh) | 一种数据存储的检测方法、设备及分布式存储系统 | |
CN107861991B (zh) | 单据数据处理方法、装置、计算机设备和存储介质 | |
CN106612330B (zh) | 支持分布式多文件导入的系统及方法 | |
CN102760096A (zh) | 测试用数据的生成方法、单元测试方法以及单元测试系统 | |
CN102289433B (zh) | 一种实现数据库触发器功能的方法及装置 | |
CN108694230A (zh) | 数据库中的唯一标识符的管理 | |
US7885985B2 (en) | System and method for building a datastore for storing and retrieving regression testing data for a complex application | |
CN114091383A (zh) | 测试序列生成方法、装置、系统及相关设备 | |
CN105389394A (zh) | 基于多个数据库集群的数据请求处理方法及装置 | |
CN108922607A (zh) | 服务器、数据处理的方法及存储介质 | |
CN111124883A (zh) | 一种基于树形表格的测试用例库引入方法、系统及设备 | |
US7506319B2 (en) | Generating a model of software in execution | |
CN115269548A (zh) | 一种数据仓库开发模型的生成方法、系统及相关设备 | |
CN111209304B (zh) | 数据处理方法、装置及系统 | |
CN112380208A (zh) | 配电自动化系统的实时数据id生成方法、系统及介质 | |
CN115563204A (zh) | 运单状态更新方法、装置、电子设备及存储介质 | |
CN112307041A (zh) | 指标维度建模方法、装置和计算机可读介质 | |
CN113515436A (zh) | 一种接口测试方法及装置 | |
CN105989021A (zh) | 一种文件处理方法和装置 | |
CN110688395A (zh) | 一种信息查询方法、装置、信息统计方法及相关设备 | |
CN109165208A (zh) | 一种用于将数据加载到数据库中的方法及系统 | |
CN113792048B (zh) | 非关系型数据库的表单校验规则生成方法和系统 | |
CN107590657B (zh) | 一种银行数据处理方法及装置 | |
CN117555955B (zh) | 数据转换方法、数据转换装置、计算机设备、存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150325 Termination date: 20170618 |