使用Oracle数据库实现Python数据持久
2010-09-22 11:08:54 来源:WEB开发网事务考虑事项
在上面清单中所示的 count_clicks 存储过程中,注意 COMMIT 的使用要紧跟在 INSERT 语句之后。最重要的是,之后要调用 add_article_details,其执行时间可能较长。通过在这个阶段提交,新插入的文章记录立即用于其他可能的更新,否则要等待 add_article_details 完成。
考虑以下示例。假设 RSS 页面刚刚更新并且一个全新的文章链接变为可用。接下来,两个不同的用户加载您的页面并几乎同时单击这个新链接。因此,将进行两个对 count_clicks 的同时调用。在本例中,首先发生的调用将一条新记录插入到 otn_articles_rss 表中,然后它将调用 add_article_details。虽然正在执行 add_article_details,但对 count_clicks 的另一个调用可以成功执行更新操作,增加总单击次数。但是,如果此处忽略了 COMMIT,那么第二个调用将找不到用于更新的行,因此尝试执行另一个插入。事实上,这将导致不可预测的结果。它将导致独特的违反约束的错误,并且会丢失将第二次 count_clicks 调用进行的更新。
此处最令人感兴趣的部分是在 count_clicks 过程主体结尾处执行另一个 COMMIT 操作。正如您所猜测的,需要在这个阶段提交以便从更新的记录中去除锁定,从而使该记录立即可用于其他会话执行的更新。有些人可能会说这个方法降低了灵活性,使客户端无法根据自己的判断提交或回滚事务。但是,在这种特殊的情况下,这并不是一个大问题,因为无论如何从调用 count_clicks 开始的事务都应该立即提交。这是因为当用户单击某个文章链接以离开您的页面时,始终会调用 count_clicks。
构建前端层
既然已经创建了存储过程并且准备好在应用程序中使用,那么您必须弄清如何从前端层编排在数据库中实现的所有这些应用程序逻辑片段所执行的整个操作流。这就是 Python 派上用场的地方了。
- ››使用linux中的quota教程
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››使用jxl生成带动态折线图的excel
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
更多精彩
赞助商链接