楼主: fan0124

[SQL] 【讨论】关于数据层用不用存储过程封装的问题?

[复制链接]
论坛徽章:
74
蓝锆石
日期:2011-12-29 15:35:34萤石
日期:2011-11-18 15:00:15祖母绿
日期:2011-12-29 15:26:07海蓝宝石
日期:2011-12-30 16:00:25紫水晶
日期:2011-12-29 15:26:07红宝石
日期:2011-12-29 15:26:07季节之章:冬
日期:2012-01-01 12:35:07季节之章:冬
日期:2012-01-01 12:35:07季节之章:夏
日期:2011-09-28 16:06:59季节之章:夏
日期:2011-09-28 16:06:59
11#
发表于 2010-6-13 16:22 | 只看该作者
语句在应用端的代码里
如果是网站就是网页的代码里
随便找了一个asp的代码如下,虽然是连sqlserver的,不过oracle应该也一样
——————————————————————
批量专辑操作
Function Topic_SetTopicMode
Dim TopModeID
If Request.form("mode")<>"" and IsNumeric(Request.form("mode")) Then
        TopModeID=Cint(Request.form("mode"))
Else
        ErrCodes=ErrCodes+"<li>"+template.Strings(2)
        Exit Function
End If
Dim ID
For I=1 To Request.Form("Announceid").Count
        ID=Replace(Request.Form("Announceid")(I),"'","")
        ID=CLng(ID)
        Dvbbs.Execute("Update Dv_Topic Set Mode="&TopModeID&" Where BoardID="&Dvbbs.BoardID&" And TopicID=" & ID)
Next
        SQL="insert into Dv_Log (L_AnnounceID,L_BoardID,L_ToUser,L_UserName,L_Content,L_IP,l_type) Values ("&Id&","&Dvbbs.BoardID&",'More','"&Dvbbs.Membername&"','批量专辑操作','"&Ip&"',3)"
        Dvbbs.Execute(SQL)
        sucmsg="<li>批量专辑操作成功。<li>您的操作信息已经记录在案。"
        Dvbbs.Dvbbs_suc(sucmsg)
End Function
——————————————————————————————————————————————

使用道具 举报

回复
论坛徽章:
3
2010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:08:342012新春纪念徽章
日期:2012-01-04 11:51:22
12#
发表于 2010-6-13 17:13 | 只看该作者
楼上的哥们真逗,sql注入这样的问题都不考虑了?

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
13#
发表于 2010-6-13 22:47 | 只看该作者
原帖由 zhangfengh 于 2010-6-13 18:05 发表
select id,name,content from user;
这样一个sql也要封装在过程里?

按我的做法就是得用过程。
应用服务器看不到任何对象,只有一堆存储过程接口,这样最安全。SQL注入也执行不了。

使用道具 举报

回复
论坛徽章:
12
2010年世界杯参赛球队:喀麦隆
日期:2010-06-30 13:41:352015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39ITPUB社区OCM联盟徽章
日期:2014-11-17 13:18:05马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:112013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28SQL数据库编程大师
日期:2011-04-13 12:09:01SQL大赛参与纪念
日期:2011-04-13 12:08:17
14#
发表于 2010-6-14 20:17 | 只看该作者
简单sql放到页面上那说明系统设计有问题,页面应该做的是显示的功能,和数据库交互的应该放到数据层.简单sql放到数据库做储存过程封装,不敢苟同,因为此一场景对处理效率增加无几,反而在测试过程出现问题,测试需要跟踪到储存过程中去,这无疑问的增加了成本,我认为是无意义的.

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
15#
发表于 2010-6-14 21:13 | 只看该作者
现实世界中,很少有为SELECT而SELECT的。一个简单SQL后面往往跟有处理逻辑,然后又有其他SQL.
这样的一些东西,我认为就是应该做到存储过程里面。
当然,这个原则也是不容易坚持的。我到目前为止也只碰到两次机会贯彻这个原则。
但是哪怕在数据库之外写SQL, 权限也是要控制,原则就是只给最少的权限。

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
16#
发表于 2010-6-14 22:46 | 只看该作者
原帖由 newkid 于 2010-6-14 21:13 发表
现实世界中,很少有为SELECT而SELECT的。一个简单SQL后面往往跟有处理逻辑,然后又有其他SQL.
这样的一些东西,我认为就是应该做到存储过程里面。
当然,这个原则也是不容易坚持的。我到目前为止也只碰到两次机会贯彻这个原则。
但是哪怕在数据库之外写SQL, 权限也是要控制,原则就是只给最少的权限。

所以嘛,开发人员很多懂SQL,但是不懂PLSQL的原因就在于此了!

使用道具 举报

回复
论坛徽章:
5
2010新春纪念徽章
日期:2010-03-01 11:08:292010年世界杯参赛球队:南非
日期:2010-06-20 11:17:01ITPUB9周年纪念徽章
日期:2010-10-08 09:32:272010广州亚运会纪念徽章:田径
日期:2011-01-09 00:21:452011新春纪念徽章
日期:2011-02-18 11:42:49
17#
发表于 2010-6-30 14:33 | 只看该作者
这个问题,性能啊效率啊不是主要的理由吧,主要还是设计模式。
所谓的把SQL放在页面中,是JSP,ASP,PHP的那些做法吧,小打小闹的开发未尝不可,就是维护起来,项目越大越痛苦,想想那些像疯长的草一样拼接的SQL啊,肠子都是青的
楼主和newkid等诸位所说的,其实是把PLSQL当作业务逻辑封装的应用服务器层来使用的做法,这个抛开效率,从设计上是完全可行的。效率嘛,自己根据项目情况评估了。

使用道具 举报

回复
论坛徽章:
5
2010新春纪念徽章
日期:2010-03-01 11:08:292010年世界杯参赛球队:南非
日期:2010-06-20 11:17:01ITPUB9周年纪念徽章
日期:2010-10-08 09:32:272010广州亚运会纪念徽章:田径
日期:2011-01-09 00:21:452011新春纪念徽章
日期:2011-02-18 11:42:49
18#
发表于 2010-6-30 14:37 | 只看该作者
说句跑题的话,CTO与骨干的分歧,往往都是政治斗争,而不是技术路线的争议,至少某一方的出发点是这个。

使用道具 举报

回复
论坛徽章:
74
蓝锆石
日期:2011-12-29 15:35:34萤石
日期:2011-11-18 15:00:15祖母绿
日期:2011-12-29 15:26:07海蓝宝石
日期:2011-12-30 16:00:25紫水晶
日期:2011-12-29 15:26:07红宝石
日期:2011-12-29 15:26:07季节之章:冬
日期:2012-01-01 12:35:07季节之章:冬
日期:2012-01-01 12:35:07季节之章:夏
日期:2011-09-28 16:06:59季节之章:夏
日期:2011-09-28 16:06:59
19#
发表于 2010-6-30 14:48 | 只看该作者
原帖由 bobocici 于 2010-6-13 17:13 发表
楼上的哥们真逗,sql注入这样的问题都不考虑了?

哥们,我就随便复制了一段别人网页上的代码作个例子,有必要这么挑刺吗,可惜了,我不是作者,要挑的话去给动网反映吧

[ 本帖最后由 onano 于 2010-6-30 14:52 编辑 ]

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
20#
发表于 2010-6-30 17:10 | 只看该作者
业务逻辑比较复杂,优化考虑存储过程,这样可以减少与DB的交换过程。因为我们只要最终结果,中间状态不需要。
单独一个SELECE或UPDATE就没有必要用PROC了。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表