所以我试图触发一个触发器并将数据插入到各种表中。但是,该过程将有所不同,因此我将创建两个单独的触发器。到目前为止,我已经学会了如何在每次插入表格后触发触发器。如果ID与另一个表中的某个主键(id)相关,我怎么能触发一个触发器?我希望触发器只触发与' 777'的Form_ID相关的survey_cycles。从表格表中。 Form_ID和Survey_Cycle在form_id中连接。这两个表的裸骨表结构如下:
sns = boto3.client('sns')
sns.publish(
PhoneNumber = '+11234567890',
Message = 'Simple text message'
)
我当前的触发器代码如下:
*Survey_Cycle:*
survey_Cycle_id
survey_form_id
*Survey_Form:*
Survey_Form_Id
答案 0 :(得分:0)
也许您可以创建一个调用存储过程的触发器,并让它决定是否执行其他处理。这是一个例子:
示例表:
SQL> create table survey_cycle
2 (survey_cycle_id number constraint pk_sc primary key,
3 survey_form_id number
4 );
Table created.
SQL> create table survey_form
2 (survey_form_id number constraint pk_sf primary key);
Table created.
SQL>
一个过程,对于传递给它的ID,它检查SURVEY_FORM表中是否存在这样的ID。如果没有,SELECT
将失败(即提升NO_DATA_FOUND
),因此该程序不会做任何事情。如果它存在,它将执行其他代码(例如插入另外两个表;而不是那样,我只是显示相应的消息)。
SQL> create or replace procedure p_survey (par_survey_form_id in number)
2 is
3 l_survey_form_id survey_form.survey_form_id%type;
4 begin
5 select survey_form_id
6 into l_survey_form_id
7 from survey_form
8 where survey_form_id = par_survey_form_id;
9
10 dbms_output.put_line('Here goes INSERT INTO survey_cycle_sample and survey_cycle_period');
11 exception
12 when no_data_Found then
13 -- there's no ID like PAR_SURVEY_FORM_ID, so - do nothing
14 null;
15 end;
16 /
Procedure created.
触发器非常简单:
SQL> create or replace trigger trg_ai_survey_cycle
2 after insert on survey_cycle
3 for each row
4 begin
5 p_survey(:new.survey_form_id);
6 end;
7 /
Trigger created.
SQL>
最后,测试:777是"现有" ID将导致其他插入。
SQL> set serveroutput on
SQL> insert into survey_form values (777);
1 row created.
SQL> --
SQL> insert into survey_cycle values (1, 100);
1 row created.
SQL> insert into survey_cycle values (2, 777);
Here goes INSERT INTO survey_cycle_sample and survey_cycle_period
1 row created.
SQL>