游标在Oracle数据库存储过程中的作用
类型:休闲拼图尺寸:113M语言:中文评分:10.0标签:下载即刻作为关系数据库市场的领头羊,Oracla占据着举足轻重的地位。虽然操作起来不如SQLSERVER方便,但其强大的功能还是吸引了大量的追随者。作为一个Oracle新手,我在工作中偶尔会用到ORACLE。以下记录是因为工作需要而写的。Oracle的br使用了cursor的存储过程,个人感觉更有代表性。希望能给初学者一些帮助,加深印象。在ORACLE中,他将一个语句块作为默认事务。也就是说,如果您只执行一个ORACLE语句块,默认情况下它将作为事务执行。01创建或替换过程sp _ editinlayout (02 FID编号,-修改记录的ID T_INLAYOUT表的主键03 InlayBoxIDs varchar2,-修改记录04 BoxCount编号,-装箱数量05apply userid varchar2,-申请人编号06 StoreUserID varchar2,-仓库管理编号07 ConfirmState char,-确认状态08 ExistState char,-存在状态09 strErr OUT varchar2 -存储过程执行结果。
成功返回空,失败返回错误原因10 ) 11 AS 12 -定义变量13v _ Now DATE14 v_Now2日期;15 v_LogID号;16 v_ChipID号;17 v_sql varchar2(2000年年);18 BEgin 19-20记录日志21 INSERT INTO T _ embedded out _ Log(F _ embedded box id、f_Boxcount、f_Applyuserid、f_Addtime、f_Confirmstate 22、f_Existstate、f_modifyid、f_modifytime、F _ modify serid)23 ((SELECT F _ embedded box id、f_Boxcount、f_Applyuserid、f_Storeuserid、f_Addtime、f_Confirmstate、f_Existstate 24、FID、SYSDATE、Storeuserid25 -取刚插入记录的ID 26从双数中选择seq_t_inlayout_log.currval进入v _ LogID27 -定义游标28声明光标我的用户是从芯片中选择其中F _镶嵌盒号输入(从29T _镶嵌盒号中选择F _ ID其中f _ InTerface BoxID=FID);30 - 开始使用游标取数据31 BEGIN 32 OPEN my cusor 33 34 LOOP 35 FETCH my cusor INTO v _ ChipID;36 - 游标取不到数据则退出37当找不到我的客户%时退出;38 39选择最小值(当前时间)进入v_Now FROM t_Chipstatehistory其中40(F _历史状态='确认_插入')和F _ ChipID=v _ ChipID41 -改变芯片表的状态42 UPDATEt _ chip SET F _ State=' Confirm _ embedded in ',F _ compare time=v _ Now WHERE F _ ID=v _ chip ID;43 - 保存芯片状态历史记录44 INSERT INTO T _ CHIPSTATEHISTORY(F _ ChipID,f_Historystate,F_TABLEID,f_Currenttime,F _ TABLENAME)45 VALUES 46(v _ ChipID,‘Confirm _ injection’,v_LogID,SYSDATE,‘T _ injectout _ Log’);47 48结束循环;49关闭myCusor50 END51 52 -选择最近芯片状态变更时间53 -选择最小值(当前时间)进入从芯片状态历史其中F_HISTORYSTATE=20 54和芯片号输入(从芯片号中选择芯片号其中F _ embeddebox ID=(SELECT F _ ID FROM T _ embeddebox 55其中f _ embeddeo utid=FID));56 57 - 将芯片表中芯片状态更新到以前状态58 - UPDATE T_CHIP SET F_State=20,F_CompareTime=v_NOW其中f _ InTerface BoxID IN(从59T _镶嵌盒ID中选择F_ID其中f _ InTerface BoxID=FID);60 - 记录芯片状态变更日志61-INSERT INTO T _ CHIP状态历史(F _ CHIP ID,f_Historystate,f_Tableid,f_Currenttime,F _ Tablename)值62-((SELECT F _ ID FROM T _ CHIP WHERE F _ inherboid=(SELECT F _ ID FROM T _ inherboid WHERE F _ inherboid=FID))、63 20,v_LogID,SYSDATE,' T _ inherboid _ Log ');64 65 66 - 将嵌入出库箱表中以前的数据更新到以前状态67 UPDATE T_InlayBox SET F_State=2,F _ InlayOutID=null WHERE F _ InlayOutID=FID;68 69 - 编辑时将新的嵌入出库信息更新70 UPDATE T _ InlayOut SET F _ inlay box ID=inlay box ID,f_Boxcount=BoxCount,f_Applyuserid=ApplyUserID,71 f_Storeuserid=StoreUserID,f_Confirmstate=ConfirmState,F_ExistState=ExistState,F _ confirm time=null 72 WHERE F _ ID=FID;73 74 - 更新t _ InTerface BOx新的状态75-UPDATE T _镶嵌盒SET F _ State=3,F _镶嵌outid=FID WHERE F _ ID in(镶嵌盒ID);76v _ SQL :=' UPDATE T _ InlayBox SET F _ State=3,F _ InlayOutID=' | | FID | | ' WHERE F _ ID in(' | | InlayBox ID | | ')';77 - 立即执行v _ SQL 78 EXECute IMPORT v _ SQL79 80从双重选择系统日期进入v _ Now281 -更新芯片表状态82 UPDATE T _ Chip SET F _ State=' No _ Confirm _ injectout ',F _ comparative time=v _ now 2 WHERE F _ injectboxid IN 83(从T _ injectboxid中选择F_ID,其中f _ injectboxid=FID);84 - 记录当前操作日志85 INSERT INTO T _ chipcstateshistory(F _ ChipID,f_Historystate,f_Tableid,f_Currenttime,f_Tablename) 86 SELECT F_ID,' No _ Confirm _ injectout ',v_LogID,v_Now2,' T _ injectout _ Log ' FROM T _ CHIP WHERE F _ injectbox ID IN 87(SELECT F _ ID FROM T _ injectbox ID其中f _ injectboxid=FID);88 - 提交89 COMMIT90 -发生异常时返回错误码91异常92当OTHERS THEN 93 strErr :=substr(sqlerrm,1,100)时;94 ROLLBACK95 END sp _镶嵌出去;但是在数据库中,除非你将所有的数据库备份与还原语句块以显示的方式【开始交易.结束交易】申明在事务中,否则数据库会将语句块中的每一句作为一个单独的默认事务执行。此外,游标是一种比较占输入-输出资源的操作,使用完后应该及时关闭,以释放系统资源。
版权声明:游标在Oracle数据库存储过程中的作用是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。