触发值中的子查询

时间:2019-04-17 11:49:37

标签: oracle if-statement plsql triggers conditional

我正在PLSQL中创建触发器:

public responseData:any; 
public onSubmit() {
  this._studentService.addData(this.addStudentForm.value).subscribe((response:any)=> { 
    console.log("success: ", JSON.stringify(response)); 
    this.responseData = response; 
  }, (error:any){
    console.log("error: ", JSON.stringify(error));
  });
}

这应该是我的错误

  

错误(7,13):PLS-00405:在此情况下不允许子查询

在这种情况下如何使用子查询?

3 个答案:

答案 0 :(得分:1)

  1. 您必须将查询结果存储到变量中。

  2. 您应该将v_wh条件放入where-block

示例:

DECLARE
    v_result NUMBER;
BEGIN
-- [...]
    SELECT COUNT(*) INTO v_result FROM wh WHERE wh != physical_wh AND wh = v_wh;

    IF v_result > 0
    THEN
        --[...]

答案 1 :(得分:0)

您需要使用一个临时变量:

npm install --global webpack

子查询只能在SQL语句中使用,而IF语句则不能。

答案 2 :(得分:0)

您可以使用单独的整数变量来检查wh.wh = :new.wh and wh != physical_wh是否存在行。

CREATE OR REPLACE TRIGGER als_int_wh_cfa_ext_aiudr AFTER
     DELETE OR INSERT OR UPDATE ON wh_cfa_ext
     FOR EACH ROW
DECLARE
     v_wh INT;
BEGIN
     SELECT CASE WHEN EXISTS
     ( select 1  v_wh
       FROM wh WHERE wh != physical_wh
           AND wh = :new.vh ) THEN 1 ELSE 0 END INTO v_wh from dual;

     IF v_wh = 1 THEN 
     INSERT INTO wh_mfqueue_test (
          seq_no,wh,message_type,family,pub_status,transaction_number,
          transaction_time_stamp
     ) VALUES (
          wh_mfsequence.NEXTVAL,:new.wh,'whmod','WH','U',1,SYSDATE
     );

     END IF;

END;
/