Plsql 我将两个表合并为一个触发器,但在创建它时遇到了问题?

Plsql 我将两个表合并为一个触发器,但在创建它时遇到了问题?,plsql,Plsql,行/列错误 16/13 PLS-00103:在期望一个 以下: := . (@%)指标 符号“:=”已插入“=”之前以继续 19/36 PLS-00103:在期望一个 以下: .(,*@%&-+;/at mod rem return返回 其中| |多集 符号“.”已插入到“x”之前以继续 ----------------------------------新代码和错误消息--------------------------- CREATE OR REPLACE TRIGGER check_en

行/列错误


16/13 PLS-00103:在期望一个 以下: := . (@%)指标 符号“:=”已插入“=”之前以继续

19/36 PLS-00103:在期望一个 以下: .(,*@%&-+;/at mod rem return返回 其中| |多集 符号“.”已插入到“x”之前以继续

----------------------------------新代码和错误消息---------------------------

CREATE OR REPLACE TRIGGER check_enumber
BEFORE INSERT on emp
FOR EACH ROW
Declare result NUMBER;
dnumber NUMBER;
d_name VARCHAR(20);
Begin
check_eno(:new.ENO, result);
IF result = -1 THEN
RAISE_APPLICATION_ERROR (-20502, 'deptno already exist');
insert into emp_audit(ENO,ENAME,SAL,DNAME) values 
(:new.ENO,:new.ENAME,:new.SAL,:new.DNAME);
END IF;

IF Find_Dn(:new.DNAME) = 1 THEN
Select DNO, DNAME INTO dnumber, d_name
FROM dept
WHERE :new.DNAME = d_name;
:new.dno = dnumber;
IF d_name = 'SALES' THEN
:new.COMM := 300;
Update DEPT Set tot_sals = tot_sals + :new.SAL;
Update DEPT Set tot_emps = tot_emps + 1;  
END IF;
END IF; 
END;
/
警告:使用编译错误创建触发器

SQL>显示错误; 触发器检查枚举错误:

行/列错误


13/2 PL/SQL:SQL语句被忽略 15/20 PL/SQL:ORA-01745:无效的主机/绑定变量名 11月16日PLS-00103:在期望一个 以下: :=.(@%;指标
符号“:=”插入“=”之前以继续。

我认为,这一行
:new.dno=dnumber;
导致了第一个问题(冒号丢失)

应将其更改为
:new.dno:=dnumber;

对于第二期(谢谢
格伦先生
),请更新(删除tot\u sals中的空格)
更新部门设置tot\u sals=tot\u sals+:new.SAL;

SQL> CREATE OR REPLACE TRIGGER check_enumber
  2  BEFORE INSERT on emp
  3  FOR EACH ROW
  4     Declare result NUMBER;
  5     dnumber NUMBER;
  6     d_name VARCHAR(20);
  7  Begin
  8   check_eno(:new.ENO, result);
  9   IF result = -1 THEN
 10     RAISE_APPLICATION_ERROR (-20502, 'deptno already exist');
 11     insert into emp_audit(ENO,ENAME,SAL,DNAME) values
 12             (:new.ENO,:new.ENAME,:new.SAL,:new.DNAME);
 13   END IF;
 14
 15   IF Find_Dname(:new.DNAME) = 1 THEN
 16     Select DNO, DNAME INTO dnumber, d_name
 17     FROM dept
 18     WHERE :new.DNAME :=d_name;
 19     :new.dno = dnumber;
 20     IF d_name = 'SALES' THEN
 21     :new.COMM := 300;
 22     Update DEPT Set tot_sals = tot_sals + :new.SAL;
 23     Update DEPT Set tot_emps = tot_emps + 1;
 24     END IF;
 25     END IF;
 26  END;
 27  /
行中似乎存在另一个问题,其中:new.DNAME:=d_name;
。请从语句中删除“:”,如下所示:

 Update DEPT Set tot_sals = tot_sals + :new.SAL;

我尝试了你的建议@Yogendra它并没有解决这个问题。你是否仍然像你在问题中提到的那样同时出现这两个错误?我认为@YogendraSingh是对的,但还有一些错误,例如
tot\u sals
(包含额外的空间)@Glenn:很好。我想这是第二个问题。我会更新答案。@user1748624请参考更新后的答案来更正Glen先生发现的第二个问题。
 WHERE :new.DNAME = d_name;