oracle 存储过程在现实中的应用都有哪些?
发布网友
发布时间:2022-05-02 13:21
我来回答
共3个回答
懂视网
时间:2022-05-02 17:43
drop procedure if exists upload_combo_complete;
CREATE PROCEDURE upload_combo_complete (uid INT,combo VARCHAR(100))
BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE tmpcount INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
START TRANSACTION;
select count into tmpcount from combocomplete where code = combo;
IF (tmpcount > 0) THEN
IF uid = -1 THEN
update combocomplete set count = tmpcount+1 where code = combo;
ELSE
insert into combouidcomplete (uid,code,time) values(uid,combo,UNIX_TIMESTAMP(NOW()));
update combocomplete set count = tmpcount+1 where code = combo;
END IF;
ELSE
IF uid = -1 THEN
insert into combocomplete (code,count) values(combo,1);
ELSE
insert into combouidcomplete (uid,code,time) values(uid,combo,UNIX_TIMESTAMP(NOW()));
insert into combocomplete (code,count) values(combo,1);
END IF;
END IF;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END //
delimiter ;
③ 在方法中调用存储过程:
def upload_complete_status(uid,app,SPORTPLANDB,combolist):
for item in combolist:
sql="call upload_combo_complete(%d,‘%s‘)"%(uid,item)
try:
MySQL.callproc(sql=sql,db=SPORTPLANDB)
return 0
except Exception,e:
logutils.info(‘info‘,‘m:upload_complete_status,Exception is %s‘%(e))
return -20003
补充:方法中的 MYSQL.callproc 定义如下:
@classmethod
def callproc(cls, sql, params=None, db=GeneralConf.SDB):
try:
cursor = connections[db].cursor()
cursor.execute(sql, params)
finally:
cursor.close()
数据库存储过程的实际应用
标签:mysql arch 新建 gen else time django strong unix
热心网友
时间:2022-05-02 14:51
1. 不愿过多的暴露数据库的结构,通过存储过程的调用,将结果直接结果返回给java程序(多为第三方的),而不用把数据结构告诉第三方
2. 承担部分业务逻辑处理:oracle数据库运行计算速度也是很快了,通过存储过程可以承担部分业务逻辑,减轻web服务器的压力
3. oracle 自身的job应用,需要调用存储过程
4. 其他应该软件需要调用存储过程。如:IVR,datastation
不知道这样说有问题不,参考下吧,也请后面的人补充
热心网友
时间:2022-05-02 16:09
简单的说,对于数据密集型的操作,如定时任务、大批量数据处理等不方便在中间件和客户端进行处理的都可以通过调用数据库存储过程的方式进行处理。
但是使用数据库端实现方式需要慎重,存储过程会使用大量数据库CPU时间,造成数据库性能低下。
所以一般建议使用中间件资源进行业务逻辑的实现,尽量避免使用存储过程。