我觉得问题出在update的时候,cursor出错了,那么用什么办法能够解决呢...高人指点啊!困惑ing
解决方案 »
- 自学orical
- 11g下SQL developer的问题
- for item in( SQL ) loop end loop
- .bak文件无法执行?
- oracle 用RMAN复制数据库出现错误,停止在“正在执行内存脚本”半小时都没运行??
- ORA-03113: 通信通道的文件结束.错误?
- start with....connect by prior 的问题!
- 新手不知道Oraclek中的一个命令(求教)
- 请问:在oracle中如何查看该服务器上有多少个数据库实例,及它们的状态
- 请问安装oracle前是否一定要安装Java Runtime Environment,我的机器是win2000 professional.
- jdbc连接数据库问题,
- 哪里有PRO C的资料
读或修改触发语句的任何变异表,其中包括触发表本身。
读或修改触发表的约束表中的主关键字,唯一关键字和外部关键字列。除此之外的其他列可以修改。上述限制适用于所有的行级触发器你可以在DECLARE后加
declare
pragma autonomous_transaction; 试试 但这样可能不安全
----------
1create trigger bb_tri
before insert on bb
for each row
declare
cursor t_sor is
select id from bb;
begin
for v_sor in t_sor loop
if :new.id=v_sor.id then
dbms_output.put_line('存在相同的id号');
end if;
end loop;
end;
/SQL> insert into bb values('1');1 row insertedSQL> select * from bb;ID
----------
1
1
楼主方法没有错,行级别前可以访问变异表,等等,看哪里出了错
BEFORE INSERT OR UPDATE on call_style_table
FOR EACH ROW
DECLARE
vs_call_style char(8);
vs_net_type char(1);
m number(2); --计数器
--n number(2); 这个不用定义,程序可以完成
cursor cur_1 is
select distinct call_style_code,net_type
from call_style_table;
BEGIN
for v_cur in cur_1 loop
if v_cur.net_type = :new.net_type then
m := 0;
for n in 1..8 loop
if substr(:new.call_style_code,n,1) = substr(v_cur.call_style,n,1) or substr(:new.call_style_code,n,1) = '*' or substr(v_cur.call_style,n,1) = '*' then
m := m+1;
end if;
end loop;
if m = 8 then
RAISE_APPLICATION_ERROR(-20001, '发生冲突,表中已存在与当前增加记录匹配的通话类型,其值为'||v_cur.call_style);
end if;
end if;
end loop;
END;
/有几处错语
错误一:
n不用定义
错误二:
fetch ...同时出现循环两次
错误三:
触发器体内不能出现commit;
beckhambobo(beckham) 提的错误确实是那么回事儿.