⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_61225.htm

📁 vc
💻 HTM
字号:
<p>
序号:61225 发表者:金额匿藏 发表日期:2003-11-18 15:16:16
<br>主题:急:触发器编程求助,谢谢。
<br>内容:数据表: tbl<BR>字段: id&nbsp;&nbsp;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&nbsp;&nbsp;你可以创建一个 seq_a 的<BR>如:&nbsp;&nbsp; create sequence seq_a&nbsp;&nbsp; minvalue 1&nbsp;&nbsp; maxvalue 999999<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start with 1&nbsp;&nbsp; increment by 1&nbsp;&nbsp;&nbsp;&nbsp;cache 20;<BR>在插入tb1的时候 用 seq_a.nextval 作为id字段的对应列<BR>如 insert into tb1 <BR>&nbsp;&nbsp;&nbsp;&nbsp; select seq_a.nextval,fd1,fd2 from XXXX;<BR>--------如果非需要使用触发器 创建 sequence&nbsp;&nbsp;后 可以使用如下 脚本<BR>create or replace trigger bb<BR>&nbsp;&nbsp;before insert on tb1&nbsp;&nbsp;<BR>&nbsp;&nbsp;referencing old as old new as new for each row<BR>declare<BR>&nbsp;&nbsp;v_id number(10,0);<BR>begin<BR>select seq_a.nextval into v_id from dual;<BR>&nbsp;&nbsp;:new.id:=v_id;<BR>end bb;<BR>&nbsp;&nbsp;<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>内容:&lt;BLOCKQUOTE&gt;引用“第1楼”所言<BR>&lt;Q&gt;--oracle 的 流水号 一般使用sequence&nbsp;&nbsp;你可以创建一个 seq_a 的&nbsp;&nbsp;如:&nbsp;&nbsp; create sequence seq_a&nbsp;&nbsp; minvalue 1&nbsp;&nbsp; maxvalue 999999&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start with 1&nbsp;&nbsp; increment by 1&nbsp;&nbsp;&nbsp;&nbsp;cache 20;&nbsp;&nbsp;在插入tb1的时候 用 seq_a.nextval 作为id字段的对应列&nbsp;&nbsp;如 ins...... . . . . . .&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;. &lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<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>内容:&lt;BLOCKQUOTE&gt;引用“第2楼”所言<BR>&lt;Q&gt;&nbsp;&nbsp;引用“第1楼”所言&nbsp;&nbsp;--oracle 的 流水号 一般使用sequence&nbsp;&nbsp;你可以创建一个 seq_a 的&nbsp;&nbsp;如:&nbsp;&nbsp; create sequence seq_a&nbsp;&nbsp; minvalue 1&nbsp;&nbsp; maxvalue 999999&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start with 1&nbsp;&nbsp; increment by 1&nbsp;&nbsp;&nbsp;&nbsp;cache 20;&nbsp;&nbsp;在插入tb1的时候 用 seq_a.nextval 作为id...... . . . . . .&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;. &lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<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&nbsp;&nbsp;后 可以使用如下 脚本<BR>create or replace trigger bb<BR>&nbsp;&nbsp;before insert on tb1&nbsp;&nbsp;<BR>&nbsp;&nbsp;referencing old as old new as new for each row<BR>declare<BR>&nbsp;&nbsp;v_id number(10,0);<BR>begin<BR>select seq_a.nextval into v_id from dual;<BR>&nbsp;&nbsp;: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>内容:&lt;BLOCKQUOTE&gt;引用“第4楼”所言<BR>&lt;Q&gt;--------如果非需要使用触发器 创建 sequence&nbsp;&nbsp;后 可以使用如下 脚本&nbsp;&nbsp;create or replace trigger bb&nbsp;&nbsp;&nbsp;&nbsp;before insert on tb1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;referencing old as old new as new for each row&nbsp;&nbsp;declare&nbsp;&nbsp;&nbsp;&nbsp;v_id number(10,0);&nbsp;&nbsp;begin&nbsp;&nbsp;select seq_...... . . . . . .&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;. &lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<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>---&nbsp;&nbsp; 用户下)<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 &#34;TY&#34;.&#34;BB&#34; <BR>BEFORE INSERT ON &#34;TB1&#34; <BR>&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (:V_id, :new.FD1, :new.FD2);<BR>end;<BR><BR>我这样也不能通过编译,我用的oralce9<BR>急啊,搞了半天还是搞不定。。。晕死<BR><BR>主要要求是前端插入:insert tb1(fd1,fd2)value(&#34;aaa&#34;,&#34;bbb&#34;)<BR>实际写入数据库中的是:(1,&#34;aaa&#34;,&#34;bbb&#34;)<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 &#34;TY&#34;.&#34;BB&#34; <BR>BEFORE INSERT ON &#34;TB1&#34; <BR>referencing old as old new as new for each row<BR>&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (: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>内容:&lt;BLOCKQUOTE&gt;引用“第4楼”所言<BR>&lt;Q&gt;--------如果非需要使用触发器 创建 sequence&nbsp;&nbsp;后 可以使用如下 脚本&nbsp;&nbsp;create or replace trigger bb&nbsp;&nbsp;&nbsp;&nbsp;before insert on tb1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;referencing old as old new as new for each row&nbsp;&nbsp;declare&nbsp;&nbsp;&nbsp;&nbsp;v_id number(10,0);&nbsp;&nbsp;begin&nbsp;&nbsp;select seq_...... . . . . . .&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;.&nbsp;&nbsp;. &lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR><BR>谢谢了,搞定。<BR>create or replace trigger bb<BR>&nbsp;&nbsp;before insert on tb1&nbsp;&nbsp;<BR>&nbsp;&nbsp;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 + -