存储过程返回表
A. 存储过程如何把一个结果集放在一张表里面并返回来
结果集有必要放在表里面返回来,直接返回游标就可以了,结果集也可以看作是张表的。
DB2的的解决方案:
1.声明存储过程的时候,在声明之后添加 RESULT SETS 1,表示返回一个结果集,示例如下:
CREATE PROCEDURE YOUPRO(IN P_UserId INTEGER)
LANGUAGE sql
RESULT SETS 1
------------------------------------------------------------------------
-- SQL 存储过程(获取用户信息)
------------------------------------------------------------------------
P1: BEGIN
--声明会使用到的参数
.... ....
... .....
2.在存储过程中声明一个游标,然后返回,示例如下:
DECLARE C1 CURSOR WITH RETURN FOR SELECT *FROM TABLE;
OPEN C1;
Oracle的解决方案:
1.先定义一个包,示例如下:
create or replace package CursorPackage as
type my_cursor is ref cursor;
end CursorPackage;
2.在存储过程返回参数使用这个定义的参数,示例如下:
create or replace procere YOUPRO(P_UserId IN NUMBER, C_Return OUT CursorPackage.my_cursor)IS ... ... ..
3.存储过程中,给返回参数赋值,示例如下:
OPEN C_Return FOR SELECT * FROM TABLE;
Sql Server的解决方案
直接返回SELECT * FROM TABLE,SqlServer中可以直接返回结果。
希望对你有帮助!
B. 如何用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
C. 如何用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;
D. 帮忙写个oracle 存储过程,可以返回表的所有列的结果集
与SQL Server的存储过程和函数均可以返回结果集不同的是,PL/SQL的存储过程和函数均不直接提供返回数据集的方法,但可以通过返回类型对象来实现返回数据集的效果。具体思路为:
(1)创建包头,在其中声明类型和存储过程,类型应该引用游标;
(2)创建包体,定义存储过程,执行查询,将查询得到的结果集以游标句柄的形式返回。
说明:游标分为显示游标和隐式游标,任何查询结果默认都提供隐式游标,当前方案的重点在于使用游标取得查询结果的句柄,由于游标被引用为类型,通过返回类型,即等效于(并不等同)返回数据集。
具体的案例如下:
--创建包头
create or replace package mypackage1
as
--声明类型,并引用游标
type cursorType is ref cursor;
--声明存储过程,两个输入参数,一个输出参数,输出游标类型数据
procere prcGetGlobalAddress
(
cur in out mypackage1.cursorType --输出参数,数据类型为引用游标的类型
);
end mypackage1;
--创建包体
create or replace package body mypackage1
as
--定义存储过程
procere prcGetGlobalAddress
(
cur in out mypackage1.cursorType
)
as
begin
--返回得到分页查询结果集的游标句柄
open cur for
select * from mytable;
end prcGetGlobalAddress;
end mypackage1;
E. C# 存储过程返回两个结果集(两张表),如何获取两张表中的数据
首先声明一个方法 传两个参数 一个是 Sql 语句 一个是你的表的名字
public DataSet getDataSet(string SQLstr, string tableName)
{
我这里写的是方法调用打开的数据库连接
你自己改 代开数据败此库连接
getcon(); //打开与数据库的连接
//创建一个SqlDataAdapter对象,并获取指定数据表的信息
同样 两个参数 一个 Sql 语句 一个 是声明的SqlConnection 连接对象
SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, My_con);
//创建DataSet对象
DataSet My_DataSet = new DataSet();
进行填充 SqlDataAdapter 实例化对象SQLda 下面的 Fill 方法 进行填充到DataSet中
一个是参数是你实例化的 DataSet 对象 一个是 你的表名
这里如果你是两张表的话 那么在填充一个就历州OK 了
SQLda.Fill(My_DataSet, tableName);
//关闭数据库的连接
con_close();
//返回DataSet对肢枯蔽象的信息
return My_DataSet;
采纳哦 !祝你成功!
F. 如何创建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程序里的调用。
G. 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 ----将存储过程返回的列值再重新插入源表中 insert into #tmp(coly) EXEC sp_d select * from #tmpendGOEXEC sp_edrop proc sp_c drop proc sp_d
H. c#EF 执行存储过程 返回数据列表 怎么做
1.首先连接数据库2.发出一下命令:DB2 -td@ -vf createSQLproc.DB2 createSQLproc.DB2文件中是创建存储过程的SQL语句; -td 选项让命令行处理程序使用@作为语句终止字符; -v 选项让命令处理程序将命令文本回显到标准输出; -f 让命令行处理程序...
I. Sqlserver存储过程返回表,如何实现
代码参考如下:
create proc p_abc @i int
as
--中间有个非常复杂的计算
select * from #tmp where fid=@i
go
create proc p_test @i int
as
set nocount on
create table #temp(.....)
insert into #temp
exec p_abc @i --执行这个语句后返回一个table,把这个返回结果插入到临时表
go