📄 subject_61225.htm
字号:
<p>
序号:61225 发表者:金额匿藏 发表日期:2003-11-18 15:16:16
<br>主题:急:触发器编程求助,谢谢。
<br>内容:数据表: tbl<BR>字段: id fd1 fd2 <BR><BR>id 作为主键,是流水号,自动增长。<BR><BR>现在想要想要在表中每插入一条记录时(插入的数据只有fd1 和 fd2 )自动将id插入,
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:lyhfly 回复日期:2003-11-18 16:15:02
<br>内容:--oracle 的 流水号 一般使用sequence 你可以创建一个 seq_a 的<BR>如: create sequence seq_a minvalue 1 maxvalue 999999<BR> start with 1 increment by 1 cache 20;<BR>在插入tb1的时候 用 seq_a.nextval 作为id字段的对应列<BR>如 insert into tb1 <BR> select seq_a.nextval,fd1,fd2 from XXXX;<BR>--------如果非需要使用触发器 创建 sequence 后 可以使用如下 脚本<BR>create or replace trigger bb<BR> before insert on tb1 <BR> referencing old as old new as new for each row<BR>declare<BR> v_id number(10,0);<BR>begin<BR>select seq_a.nextval into v_id from dual;<BR> :new.id:=v_id;<BR>end bb;<BR> <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金额匿藏 回复日期:2003-11-19 11:53:01
<br>内容:<BLOCKQUOTE>引用“第1楼”所言<BR><Q>--oracle 的 流水号 一般使用sequence 你可以创建一个 seq_a 的 如: create sequence seq_a minvalue 1 maxvalue 999999 start with 1 increment by 1 cache 20; 在插入tb1的时候 用 seq_a.nextval 作为id字段的对应列 如 ins...... . . . . . . . . . . . . </Q></BLOCKQUOTE><BR>lyhfly 你好,谢谢<BR><BR>因为数据是从语音平台传过来的,要他调用序列很不方便,所以它只提交数据段,由数据库自动添加流水号。我也想在触发器中调用序列来生成流水号,不过我没有做过这样面的编程,我先试试,不行再问你。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jenic 回复日期:2003-11-19 15:19:08
<br>内容:<BLOCKQUOTE>引用“第2楼”所言<BR><Q> 引用“第1楼”所言 --oracle 的 流水号 一般使用sequence 你可以创建一个 seq_a 的 如: create sequence seq_a minvalue 1 maxvalue 999999 start with 1 increment by 1 cache 20; 在插入tb1的时候 用 seq_a.nextval 作为id...... . . . . . . . . . . . . </Q></BLOCKQUOTE><BR><BR>提示:old和new值不能相同。<BR><BR>去掉referencing old as old new as new for each row<BR>提示:new或old引用不能出现在表层触发器中。<BR><BR>是什么原因阿?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:lyhfly 回复日期:2003-11-19 15:20:08
<br>内容:--------如果非需要使用触发器 创建 sequence 后 可以使用如下 脚本<BR>create or replace trigger bb<BR> before insert on tb1 <BR> referencing old as old new as new for each row<BR>declare<BR> v_id number(10,0);<BR>begin<BR>select seq_a.nextval into v_id from dual;<BR> :new.id:=v_id;<BR>end bb;<BR>--把内容看完
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jenic 回复日期:2003-11-19 15:29:08
<br>内容:<BLOCKQUOTE>引用“第4楼”所言<BR><Q>--------如果非需要使用触发器 创建 sequence 后 可以使用如下 脚本 create or replace trigger bb before insert on tb1 referencing old as old new as new for each row declare v_id number(10,0); begin select seq_...... . . . . . . . . . . . . </Q></BLOCKQUOTE><BR><BR><BR>我是先创建了序列,创建触发器时出现上列提示。<BR>我的qq:35303557<BR>msn:jenicwang@hotmail.com<BR>你的是什么<BR>在线和你交流,ok?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lyhfly 回复日期:2003-11-19 16:35:37
<br>内容:--抱歉 我在单位 不能使用聊天工具 (而且我好几年没用过了)<BR>--如果4楼所说 都在orcale8 中测试了的 应该没有问题 (前提:seq 和 tri在同一个<BR>--- 用户下)<BR>-- 插入的内容 因为是 :new 所以永远是序列中取来的流水号<BR>-- 8i也可以 但其他版本我不太清楚
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jenic 回复日期:2003-11-19 17:07:04
<br>内容:CREATE OR REPLACE TRIGGER "TY"."BB" <BR>BEFORE INSERT ON "TB1" <BR> DECLARE<BR>V_ID NUMBER(4);<BR>BEGIN<BR>SELECT SEQ_A.NEXTVAL INTO :V_ID FROM DUAL;<BR>insert into TB1(id, FD1, FD2) values<BR> (:V_id, :new.FD1, :new.FD2);<BR>end;<BR><BR>我这样也不能通过编译,我用的oralce9<BR>急啊,搞了半天还是搞不定。。。晕死<BR><BR>主要要求是前端插入:insert tb1(fd1,fd2)value("aaa","bbb")<BR>实际写入数据库中的是:(1,"aaa","bbb")<BR>1为取自序列中的流水号。由于id为主键不能为空,觉得不好用insert后触发。<BR><BR><BR>请老大指点,谢谢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lyhfly 回复日期:2003-11-19 17:18:25
<br>内容: referencing old as old new as new for each row<BR><BR>以上内容去那里了? 必需的<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jenic 回复日期:2003-11-21 11:52:46
<br>内容:CREATE OR REPLACE TRIGGER "TY"."BB" <BR>BEFORE INSERT ON "TB1" <BR>referencing old as old new as new for each row<BR> DECLARE<BR>V_ID NUMBER(4);<BR>BEGIN<BR>SELECT SEQ_A.NEXTVAL INTO :V_ID FROM DUAL;<BR>insert into TB1(id, FD1, FD2) values<BR> (:V_id, :new.FD1, :new.FD2);<BR>end;<BR><BR>能够建立触发器,但是不能通过编译,是无效的。不知道是什么原因。<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jenic 回复日期:2003-11-21 13:22:51
<br>内容:<BLOCKQUOTE>引用“第4楼”所言<BR><Q>--------如果非需要使用触发器 创建 sequence 后 可以使用如下 脚本 create or replace trigger bb before insert on tb1 referencing old as old new as new for each row declare v_id number(10,0); begin select seq_...... . . . . . . . . . . . . </Q></BLOCKQUOTE><BR><BR>谢谢了,搞定。<BR>create or replace trigger bb<BR> before insert on tb1 <BR> referencing old as old new as new for each row<BR>begin<BR>select seq_a.nextval into :new.id from dual;<BR>end bb;<BR><BR>这样也可以,只是不知道以上的写法为什么不行。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -