create or replace trigger "KINGLOG_LOGNUM_TRG"
after insert on "KINGLOG"
for each row
when (NEW.lognum = 10)
BEGIN
declare
ks_lockip varchar2(4000);
CURSOR ks_lockip_cur IS
SELECT lockip from kingsystem where rownum = 1;
begin
open ks_lockip_cur;
loop
FETCH ks_lockip_cur
INTO ks_lockip;
EXIT WHEN ks_lockip_cur%NOTFOUND;
end loop;
close ks_lockip_cur;
end;
set ks_lockip = ' + @ks_lockip + ' + ' + :NEW.ip + '; /*该句报错ORA-00922: missing or invalid option*/
BEGIN
UPDATE kingsystem SET lockip = ' + @ks_lockip + ';
END;
END;
after insert on "KINGLOG"
for each row
when (NEW.lognum = 10)
BEGIN
declare
ks_lockip varchar2(4000);
CURSOR ks_lockip_cur IS
SELECT lockip from kingsystem where rownum = 1;
begin
open ks_lockip_cur;
loop
FETCH ks_lockip_cur
INTO ks_lockip;
EXIT WHEN ks_lockip_cur%NOTFOUND;
end loop;
close ks_lockip_cur;
end;
set ks_lockip = ' + @ks_lockip + ' + ' + :NEW.ip + '; /*该句报错ORA-00922: missing or invalid option*/
BEGIN
UPDATE kingsystem SET lockip = ' + @ks_lockip + ';
END;
END;
ks_lockip := ks_lockip||:NEW.ip;
SQL> select concat('abc','def') from dual;CONCAT
------
abcdefSQL> select 'abc'||'def' from dual;'ABC'|
------
abcdefSQL>
BEGIN
UPDATE kingsystem SET lockip = ks_lockip ;
这次提示PLS-00201: identifier 'KS_LOCKIP' must be declared
是不是我申明错了啊
declare
ks_lockip varchar2(4000);
CURSOR ks_lockip_cur IS
SELECT lockip from kingsystem where rownum = 1;
begin
BEGIN
UPDATE kingsystem SET lockip = ' + @ks_lockip + ';
END;sqlserver 的写法,改成:ks_lockip := ks_lockip || :NEW.ip;
BEGIN
UPDATE kingsystem SET lockip = ks_lockip;
END;
after insert on "KINGLOG"
for each row
when (NEW.lognum = 10)
BEGIN
declare
ks_lockip varchar2(4000);
CURSOR ks_lockip_cur IS
SELECT lockip from kingsystem where rownum = 1;
begin
open ks_lockip_cur;
loop
FETCH ks_lockip_cur
INTO ks_lockip;
EXIT WHEN ks_lockip_cur%NOTFOUND;
end loop;
close ks_lockip_cur;
ks_lockip := ks_lockip ||:NEW.ip; /*该句报错ORA-00922: missing or invalid option*/
UPDATE kingsystem SET lockip = ks_lockip ;
END;
这次提示PLS-00201: identifier 'KS_LOCKIP' must be declared
是不是我申明错了啊
declare
ks_lockip varchar2(4000);
CURSOR ks_lockip_cur IS
SELECT lockip from kingsystem where rownum = 1;
begin
after insert on "KINGLOG"
for each row
when (NEW.lognum = 10)
BEGIN --去掉
declare
ks_lockip varchar2(4000);
CURSOR ks_lockip_cur IS
SELECT lockip from kingsystem where rownum = 1;
begin
open ks_lockip_cur;
loop
FETCH ks_lockip_cur
INTO ks_lockip;
EXIT WHEN ks_lockip_cur%NOTFOUND;
end loop;
close ks_lockip_cur;
ks_lockip := ks_lockip ||:NEW.ip; /*该句报错ORA-00922: missing or invalid option*/
UPDATE kingsystem SET lockip = ks_lockip ;
END;
after insert on "KINGLOG"
for each row
when (:NEW.lognum = 10)
declare
ks_lockip varchar2(4000);
CURSOR ks_lockip_cur IS SELECT lockip from kingsystem where rownum = 1;
begin
open ks_lockip_cur;
loop
FETCH ks_lockip_cur INTO ks_lockip;
EXIT WHEN ks_lockip_cur%NOTFOUND;
end loop;
close ks_lockip_cur;
ks_lockip :=ks_lockip||:NEW.ip; /*该句报错ORA-00922: missing or invalid option*/ UPDATE kingsystem SET lockip =ks_lockip;END;
after insert on "KINGLOG"
for each row
when (:NEW.lognum = 10)
declare
ks_lockip varchar2(4000);
CURSOR ks_lockip_cur IS
SELECT lockip from kingsystem where rownum = 1;
begin
open ks_lockip_cur;
loop
FETCH ks_lockip_cur
INTO ks_lockip;
EXIT WHEN ks_lockip_cur%NOTFOUND;
end loop;
close ks_lockip_cur;
ks_lockip := ks_lockip || :NEW.ip;
UPDATE kingsystem SET lockip = ks_lockip;
END;
我改了以后,整个语句如上,却还是报错,实在是郁闷
PLS-00103: Encountered the symbol "KS_LOCKIP"
PLS-00103: Encountered the symbol "KS_LOCKIP"
PLS-00103: Encountered the symbol ";" when expecting one of the following:
. ( ) , * @ % & = - + < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like LIKE2_
LIKE4_ LIKEC_ between || indicator member SUBMULTISET_
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
begin case declare end exception exit for goto if loop mod
null pragma raise return select update while with
<an identifier> <a double-quoted delimited-identifier>
<a bind variable> << close current delete fetch lock insert
open rollback savepoint set sql execute commit forall merge
pipe
ks_lockip :=ks_lockip||:NEW.ip; 这句最好用个连接函数concat就好了