mysql存储过程的小问题,无法运行?
CREATEPROCEDUREp7(INbINTEGER(12))
begin
declareaINTEGER(12);
seta=5;
INSERTINTOtVALUES(a);
SELECTs1*aFROMtWHEREb<=s1;
这一段可以执行的--~~~难道没有BEGIN没有END么--,这段代码你用不了?
哦......你难道是在命令行里面创建存储过程!!!?
那这样不行,我从来没在命令行里面试过,有很多软件可以用啊,而且没软件也可以写SQL脚本,然后直接执行啊,在命令行里面创建不是很方便。
命令行下创建这个存储过程:
delimiter//
CREATEPROCEDUREp7(INbINTEGER(12))
begin
declareaINTEGER(12);
seta=5;
INSERTINTOtVALUES(a);
SELECTs1*aFROMtWHEREb<=s1;
刚刚在命令行下创建成功了的
不过推荐使用EMSFORMYSQL,DREAMCODEFORMYSQL,PHPMYADMIN或者使用官方的MYSQL图形化工具
你的问题1在于没有传参数,就上上面这段代码,要是把参数去掉还是会报错,MYSQL好像不允许执行不传参数的存储过程,但是你也可以随便声明一个,因为你可以把b定义在存储过程内,参数不使用就是了,比如:
CREATEPROCEDUREp7(INXINTEGER(12))
begin
declareaINTEGER(12);
declarebinteger(12);
seta=5;
setb=5;
INSERTINTOtVALUES(a);
SELECTs1*aFROMtWHEREb<=s1;
然后callp7(12);但是参数X并不影响你的存储过程,但是必须传一个。
问题2,你没有声明a,b,变量必须声明--
问题3,我是从5.0开始用MYSQL的,所以我不太清楚以前MYSQL变量的表现形式,但是在存储过程内,declareachar(4);声明一个变量a,我要用它的时候,seta='abcd';就行了,不用带@
还是上面的代码
我把insertintotvalues(a)改为@a,那就插入的是空值
最后end后面没有分号,最后一个END后面没分号,中间的有分号的比如
CREATEPROCEDUREp7(INXINTEGER(12))
begin
declareaINTEGER(12);
declarebinteger(12);
seta=5;
setb=5;
if(a=b)
begin
INSERTINTOtVALUES(a);
SELECTs1*aFROMtWHEREb<=s1;
INSERTINTOtVALUES(b);
SELECTs1*aFROMtWHEREa<=s1;
endif;
最后一个end没分号,中间有
麻烦问下,为什么我的mysql存储过程一次调用,会被执行了两次?
sqlyog中,调用了一次call我的存储过程(入参)然后,在mysql中执行showprocesslist进行查看发现有两个连接在同时执行我的存储过程中的语句(别的是不可能出现那些sql语句的)而且经过执行后的结果来看,执行后的数据为正常数据的两倍。然后将存储过程中的sql语句进行逆运算(比如,加变成减),然后再执行,发现数据恢复为正常数据了。贴你的存储过程的代码。你的代码中有什么语句调用了自己。这种可能总是存在的吧。另外你为什么不肯在MYSQL命令行工具中试一下看看有没有同样的问题?引用那在MYSQL命令行工具中试一下。以断定是你的SQLYOG的问题还是你的存储过程写错了。yuwenbao的回复:mysql版本是mysql-community-5.1.45系统是centos5.4mysql做了主从还有你的存储过程是用什么方式调用的,比如shell命令行里面,或者workbench前台工具里面等等?补充一下,刚开始查看是不会出现两个连接都同时执行我的存储过程中语句的情况的。只是中途突然出现一个连接在执行存储过程中的语句。一直不明白为什么,存储引擎用的是innodb不知道,我才问的,呵呵,看看哪位大侠知道,什么语句或者什么情况会造成mysql存储过程另起一个连接去再执行一次存储过程。那个连接放心,是从同一个ip起来的,不是中间件,也不是任何人。所以比较纳闷。
delphi调用sql中的存储过程我在SQL上建了以下存储过程,
以ado为例,新增一个ADOStoredProc1,设置其connection属性为正确的连接,设置其procedurename为你所说的存储过程的名称,执行其open方法(或者execproc)。
biee怎么调用存储过程?
还有一个方法,就是在数据连接池那里。有个连接前执行。
为什么mysql的存储过程调用一次会运行多次
在 sqlyog中,调用了一次call 我的存储过程(入参)
然后,在mysql中执行show full processlist进行查看
发现有两个连接在同时执行我的存储过程中的语句(别的是不可能出现那些sql语句的)
而且经过执行后的结果来看,执行后的数据为正常数据的两倍。然后将存储过程中的sql语句进行逆运算(比如,加变成减),然后再执行,发现数据恢复为正常数据了。
SQL中函数不能调用存储过程吗?
执行存储过程方法:
exec procedure_name(参数1,参数2...)
或者call procedure_name(参数1,参数2...)1. 函数结构:架构+函数名称
2. 所以一般在存储过程都可以直接调用,如下sql:
3. 假如函数test,参数为字符串类型
4. select dbo.test('123')
5. 存储过程调用也是以上格式一样,