mysql存储过程返回列表
从存储过程返回表类型的值也有二种:
1.存储过程使用浮标参数,即同时指定CURSOR VARYING OUTPUT项.调用者可以使用while及fetch循环遍历该浮标.
2.直接将存储过程返回的结果集插入到表中,即使用insert into 表名 exec 存储过程.此种方式中注意存储过程返回的结果集列与insert的列要完全对应,可以在insert中指定列名来保证对应关系.
------------------------------------------------------------------------------测试:------------------------------------------------------------------------------
----建立测试用的临时表
create table #tmp (colx int,coly int)
insert into #tmp values(1,2)
insert into #tmp values(2,3)
insert into #tmp values(3,4)
select * from #tmpGO----创建返回游标的存储过程
create proc sp_c @cur CURSOR VARYING OUTPUTASbeginset @cur = CURSOR for select colx from #tmp
open @cur /*该过程返回游标,该游标为colx列的查询结果*/endGO----创建返回表的存储过程
create proc sp_dasselect coly from #tmp /*该过程返回coly列的查询结果*/go----创建用于调用以上二个存储过程的存储过程
create proc sp_easbegindeclare @x int
declare @cur cursor
----接收游标,并遍历游标
EXEC sp_c @cur OUTPUT
fetch next from @cur into @x
while (@@FETCH_STATUS = 0)beginprint @xfetch next from @cur into @xENDclose @curdeallocate @cur
----将存储过程返回的列值再重新插入源表中
❷ MYSQL的存储过程如何返回查询到的行数据
out返回只能是确定的某种类型的一个值,例如VARCHAR或者INT等等,你想返回多条记录的话只需要在最后加上一个或者多个SELECT语句就行了啊,然后在外面用ResultSet对象接住就行了。
❸ 如何用mysql 的存储过程 返回一个表
mysql中要获得存储过程的返回值,可以增加一个out参数,用来返回。
mysql中存储过程的例子:
CREATE PROCEDURE addvoucher (
IN userid INT,
IN voucherid INT,
OUT result INT
)
BEGIN
SELECT
@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,
@isdead_a := isdead
FROM
t_voucher
WHERE
id = voucherid;
❹ 如何创建MySQL存储过程可以返回一个表类型的数据
如何创建MySQL存储过程可以返回一个表类型的数据
首先需要知道“另一个存储过程”的结果集的所有列的类型。
假设“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集
如下
CREATE PROCEDURE sp2
AS
DECLARE @t table(a int,b int,c int)
INSERT INTO @t(a,b,c)
EXEC sp1
SELECT * FROM @t
使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。
创建存储过程
和数据表一样,在使用之前需要创建存储过程,它的简明语法是:
引用:
Create PROC 存储过程名称
[参数列表(多个以“,”分隔)]
AS
SQL 语句
例:
引用:
Create PROC upGetUserName
@intUserId INT,
@ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数
AS
BEGIN
-- 将uName的值赋给 @ostrUserName 变量,即要输出的参数
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END
其中 Create PROC 语句(完整语句为Create PROCEDURE)的意思就是告诉SQL SERVER,现在需要建立一个存储过程,upGetUserName 就是存储过程名称,@intUserId 和 @ostrUserName 分别是该存储过程的两个参数,注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。
二、存储过程的调用
之前已经创建了一个名为“upGetUserName”的存储过程,从字面理解该存储过程的功能是用来取得某一个用户的名称。存储过程建立好了,接下来就是要在应用程序里调用了,下面看一下在ASP程序里的调用。
❺ 如何用mysql 的存储过程 返回一个表
mysql好像不能返回一个表吧,你为什么要返回这个表呢?mssql里面可以写一个表值函数,返回一个结果集,你这里是创建了一个表,还需要返回吗?? 你的biao111已经存在在数据库里了,你直接select不就行了。而且select
*
into
biao111
from
checi
这种用法mysql也不支持。你看看这样能不能行?
DELIMITER
//
CREATE
PROCEDURE
proc_40()
BEGIN
CREATE
TABLE
biao111
SELECT
*
FROM
checi;
SELECT
*
FROM
biao111;
END
❻ MYSQL 存储过程 动态指定返回列
create proc sp_getcolumnfromA(@col varchar(20))
as
begin
declare @sqlstr varchar(1000)
set @sqlstr = 'select ' + @col + ' from tb'
exec(@sqlstr)
end
go
exec sp_getcolumnfromA 'A,B'
exec sp_getcolumnfromA 'A'
exec sp_getcolumnfromA 'A,B,C'