时间:2021-07-01 10:21:17 帮助过:5人阅读
昨天自己在进行开发测试的时候,编写mysql 的一个存储过程 ,代码是比较简单的
就是根据名称查询对应的数据并返回
DELIMITER //
CREATE PROCEDURE proc1(name int)
BEGIN
select * from table_name where name=name;
END
//
大家可能注意到了一个变量名称 name 因为我的数据库中的一个字段的名称也是name
按照传统编程语言传递参数的特点查询应该是没有问题的,但是因为是sql ,结果我的查询时显示全部的数据,按照这样的话
mysql 中的解释一样是这样的,在sql 中 因为name=name 永远为真 所以是全部的数据。
一般在mysql 中用户的变量使用@字符开始。
所以在开发的过程中还是按照规范开发会比较好,会减少很多看似怪异的显现。
这种情况在oracel 中也是存在的,但是在sql serve 中就不会了,因为sql serve 的用户变量必须使用@ 符号。
附oracle 的测试:
对于oracle 中的sql 测试代码如下:
declare
name VARCHAR2(20);
V_id VARCHAR2(20);
begin
name:='class13';
select id into V_id from firstclass where name=name;
dbms_output.put_line(V_id);
end;
提示的错误如下:
原因与mysql 是类似的。
修改一下名称即可。