0%

数据库大作业笔记(四)

在写今天的正经内容之前,我真的是要吐槽一下我的英语水平(也有可能是打字水平)!!!Yii报错:

Getting unknown property: common\models\Vborrow::browid

吓得我从vborrow, vborrowSearch, vborrowController, vborrow/index找了半天,原来是拼写错误!!”borw”不是”brow”!我觉得这个错误和sxr同学的”model”—“module”有异曲同工之妙……

mySql的存储过程

语法

事先用“DELIMITER $$”或“DELIMITER //”声明当前段分隔符,让编译器把两个”//“之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。

1
2
3
4
5
6
7
8
9
10
delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) #声明存储过程
BEGIN
SET @p_in=1; #变量赋值
DECLARE l_int int unsigned default 4000000; #变量定义
DELETE FROM MATCHES WHERE playerno = p_playerno;
END$$ #存储过程开始和结束符号
elimiter; #将语句的结束符号恢复为分号

call sp_name[(传参)];#调用存储过程

然后问题就来了,我在mySql里写的存储过程,是要更新某一个值,没有语法错误,成功执行了,但是结果显示影响了0行。

1
set @p0='c1',@p1='120' call proc_update(@p0,@p1)

错误的代码大概会在我交完作业之后放上来。大概的函数体是:

1
2
3
4
5
6
7
8
begin
if(/*condition*/)
then
update -- statement1
else
update -- statement2
end if;
end

经过测试,这么写的话,不管是什么condition,两个statement都没有执行。


上面都是废话。直接写解决方法吧——

存储过程中要有打印,比如在end if后面加

1
2
select @p0,@p1
#select 1 都可以

参数名要改成

1
2
3
@p0,@p1
#而不能是
@catid,@price

不知道为什么,试了很久,这样改的时候就正常工作了。

另外补充,MySQL中的注释有三种:
1
2
3
-- 一般用于单行注释(注意 -- 后面要有空格!)
/*Information ,一般用于多行注释 */
#Information