oracle触发器出错。我不会pl/sql,不知道语句规则,请各位帮我看看错误原因。下面列出代码和错误。

CREATEORREPLACETRIGGERAI_DAA091AFTERINSERTONDAA091FOREACHROWDECLARE--定义序号变量;XH1,XH2NU... CREATE OR REPLACE TRIGGER AI_DAA091
AFTER INSERT ON DAA091
FOR EACH ROW
DECLARE
--定义序号变量;
XH1,XH2 NUMBER(3);
BEGIN
IF :NEW.JDDS1<>0 AND :NEW.JDDS2<>0 THEN
SELECT XCXH FROM DAA05 WHERE JH=:NEW.JH AND SYDS<=:NEW.JDDS1 AND SYDS+SYHD>=:NEW.JDDS1;
IF _TALLY<>0 THEN
XH1=XCXH;
ELSE
SELECT XCXH FROM (SELECT XCXH,ROW_NUMBER() OVER(ORDER BY syds) AS r FROM daa05 t WHERE jh =:NEW.JH AND syds>:NEW.JDDS1) t WHERE r=1;
IF _TALLY<>0
XH1=XCXH;
ELSE
--判断是否大于daa05中的最大砂岩组,大于则退出触发器;(不知道return能不能退出触发器)
RETURN;
END IF;
END IF;
SELECT XCXH FROM (SELECT XCXH,ROW_NUMBER() OVER(ORDER BY syds) AS r FROM daa05 t WHERE jh =:NEW.JH AND syds>:NEW.JDDS2) t WHERE r=1;
IF _TALLY<>0 THEN
XH2=XCXH-1;
ELSE
SELECT MAX(XCXH) INTO XH2 FROM DAA05 WHERE JH=:NEW.JH;
END IF;
ELSIF
:NEW.JDDS1=0 AND :NEW.JDDS2<>0 THEN
SELECT XCXH FROM DAA05 WHERE JH=:NEW.JH AND SYDS<=:NEW.JDDS2 AND SYDS+SYHD>=:NEW.JDDS2;
IF _TALLY<>0
XH1=XCXH;
SELECT XCXH FROM (SELECT XCXH,ROW_NUMBER() OVER(ORDER BY syds) AS r FROM daa05 t WHERE jh =:NEW.JH AND syds>:NEW.JDDS2) t WHERE r=1;
IF _TALLY<>0 THEN
XH2=XCXH-1;
ELSE
SELECT MAX(XCXH) INTO XH2 FROM DAA05 WHERE JH=:NEW.JH;
END IF;
END IF;
END IF;
UPDATE DAA05 SET SKQK=1 WHERE JH=:NEW.JH AND (XCXH>=XH1 AND XCXH<=XH2);
END;

错误问题
3/6 PLS-00103: 出现符号 ","在需要下列之一时:
constant exception
<an identifier> <a double-quoted delimited-identifier> table
long double ref char time timestamp interval date binary
national character nchar
3/20 PLS-00103: 出现符号 ";"在需要下列之一时:
:= , not null default
external character
9/8 PLS-00103: 出现符号 "_"在需要下列之一时:
( - + case mod new not null
<an identifier> <a double-quoted delimited-identifier>
<a bind variable> continue avg count current exists max min
prior sql stddev sum variance execute forall merge time
timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
<一个带有字符集说明的可带引号的字符串文字>
<一个可带引号的 SQL 字符串> purge
符号 "_" 被忽略。
10/10 PLS-00103: 出现符号 "="在需要下列之一时:
:= . ( @ % ;
符号 ":=在 "=" 继续之前已插入。
12/51 PLS-00103: 出现符号 "("在需要下列之一时:
, from
展开
 我来答
易图易科技
2011-04-21
知道答主
回答量:13
采纳率:0%
帮助的人:11.4万
展开全部
3/6 PLS-00103: 出现符号 ","在需要下列之一时:
--定义序号变量;
XH1,XH2 NUMBER(3);
解决方法
XH1 NUMBER(3);
XH2 NUMBER(3);

9/8 PLS-00103: 出现符号 "_"在需要下列之一时:
_TALLY
解决方法 不能以下划线开头

10/10 PLS-00103: 出现符号 "="在需要下列之一时:
XH1=XCXH;
解决方法 XH1:=XCXH;

12/51 PLS-00103: 出现符号 "("在需要下列之一时:
9.2的版本以下的ROW_NUMBER() OVER(ORDER BY syds) 需要解决下 你百度下
追问
感谢你的回应,SELECT XCXH FROM (SELECT XCXH,ROW_NUMBER() OVER(ORDER BY syds) AS r FROM daa05 t WHERE jh =:NEW.JH AND syds>:NEW.JDDS1) t WHERE r=1;
这条语句我单独都能执行,为什么在触发器中出错?
追答
在ORACLE的存储过程中,select语句必须带into 的,触发器也一样
你这里面还有很多语法不对的地方,等你改差不多就接着报错了。

方法一 EXECUTE IMMEDIATE
方法二 使用动态游标CURSOR
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式