① oracle存储过程中创建临时表,并插入数据,最后从临时表查询出数据
见图,直接不能回复
② PHP如何调用Mysql存储过程并以表格形式显示出数据表内容。
可以参考这个:
返回一个结果全世界都知道怎么处理,关键是返回多个结果集就不好办了,下面有一解决办法
存储过程代码
DELIMITER $$;
DROP PROCEDURE IF EXISTS `test`.`sp_test`$$
CREATE PROCEDURE `test`.`sp_test` ()
BEGIN
select * from `user`.`user` limit 0, 50;
select count(0) as `count` from `user`.`user`;
END$$
DELIMITER ;$$
php 代码
$rows = array ();
$db = new mysqli('127.0.0.1','root','123456','user');
if (mysqli_connect_errno()){
$this->message('Can not connect to MySQL server');
}
$db->query("SET NAMES UTF8");
if($db->real_query("call sp_test()")){
do{
if($result = $db->store_result()){
while ($row = $result->fetch_assoc()){
array_push($rows, $row);
}
$result->close();
}
}while($db->next_result());
}
$db->close();
③ 如何用SQL2005的存储过程导出EXECL表,急,线上等
导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型
--*/
/**//*--调用示例
p_exporttb @sqlstr='select * from 地区资料' ,@path='c:',@fname='aa.xls',@sheetname='地区资料'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and
OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_exporttb]
GO
create proc p_exporttb
@sqlstr sysname, --查询语句,如果查询语句中使用了order by ,请加上top 100 percent,注意,如果导 出表/视图,用上面的存储过程
@path nvarchar(1000), --文件存放目录
@fname nvarchar(250), --文件名
@sheetname varchar(250)='' --要创建的工作表名,默认为文件名
as
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)
--参数检测
if isnull(@fname,'')='' set @fname='temp.xls'
if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#')
--检查文件是否已经存在
if right(@path,1)<>'' set @path=@path+''
create table #tb(a bit,b bit,c bit)
set @sql=@path+@fname
insert into #tb exec master..xp_fileexist @sql
--数据库创建语句
set @sql=@path+@fname
if exists(select 1 from #tb where a=1)
set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'
+';CREATE_DB="'+@sql+'";DBQ='+@sql
else
set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 5.0;HDR=YES' +';DATABASE='+@sql+'"'
--连接数据库
exec @err=sp_oacreate 'adodb.connection',@obj out
if @err<>0 goto lberr
exec @err=sp_oamethod @obj,'open',null,@constr
if @err<>0 goto lberr
--创建表的SQL
declare @tbname sysname
set @tbname='##tmp_'+convert(varchar(38),newid())
set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'
exec(@sql)
select @sql='',@fdlist=''
select @fdlist=@fdlist+','+a.name
,@sql=@sql+',['+a.name+'] '
+case when b.name in('char','nchar','varchar','nvarchar') then
'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')'
when b.name in('tynyint','int','bigint','tinyint') then 'int'
when b.name in('smalldatetime','datetime') then 'datetime'
when b.name in('money','smallmoney') then 'money'
else b.name end
FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype
where b.name not in
('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')
and a.id=(select id from tempdb..sysobjects where name=@tbname)
select @sql='create table ['+@sheetname
+']('+substring(@sql,2,8000)+')'
,@fdlist=substring(@fdlist,2,8000)
exec @err=sp_oamethod @obj,'execute',@out out,@sql
if @err<>0 goto lberr
exec @err=sp_oadestroy @obj
--导入数据
set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=YES
;DATABASE='+@path+@fname+''',['+@sheetname+'$])'
exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from['+@tbname+']')
set @sql='drop table ['+@tbname+']'
exec(@sql)
return
lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
lbexit:
select cast(@err as varbinary(4)) as 错误号 ,@src as 错误源,@desc as 错误描述
select @sql,@constr,@fdlist
go
④ SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据
第一个存储过程(被调用的)里定义OUTPUT参数,如:
...
Create Procere 存储过程1
@参数1 数据类型
@参数2 数据类型 output
AS
存储过程语句
第二个存储过程:
...
Create ...
...
AS
Declare @本地参数1
Declare @本地参数2
EXEC 存储过程1 @本地参数1,@本地参数2 OUTPUT
--这样@本地参数2就可以直接使用了,带回来的是存储过程1中的@参数2.
⑤ 需要实现将SQLSERVER数据库存储过程执行结果输出到指定EXCEL表中该怎么做谢谢
说说思路:
这个显然要用ADO
1、连接数据库,得到连接对象conn
2、用下面的select语句打开表,将数据读入RecordSet
set rs=conn.execute("select * from 表名")
3、用循环将数据读入二维数组arr
row=0
while not rs.eof
arr[row,0]=rs["id"]
arr[row,1]=rs["year"]
arr[row,2]=rs["mon"]
arr[row,3]=rs["1"]
arr[row,4]=rs["2"]
...
...
...
row=row+1
wend
⑥ 如何利用存储过程向表中添加数据
create procere prc_sale
@编号 int
,@名称 varchar(20)
,@价钱 float
,@卖出数量 float
as
begin
insert into sales (编号,名称,价钱,卖出数量)
values (@编号,@名称,@价钱,@卖出数量);
end;
⑦ 如何用存储过程实现将同一数据库中一个表的部分数据导入另一表中
可以将一个表中的部分数据先查询出现存到一个临时表中,然后从临时表中一条一条的取出来,添加到另一张表中,
也可以不用临时表,直接将查询出来的数据添加到另一张表中
⑧ SQL 如何 从一个表中调出数据 然后每个数据 都执行 同一个存储过程(PROCEDURE)
可以有一个更简单的方法:
把你的procere改为函数(function)
假设名称为F1
直接 SELECT F1(ID) FROM TABLENAME ....
⑨ SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据
首先需要知道“另一个存储过程”的结果集的所有列的类型。
假设“另一个存储过程”的名字是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程序里的调用。
引用:
Dim adoComm
’// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象
.ActiveConnection = adoConn
’// 类型为存储过程,adCmdStoredProc = 4
.CommandType = 4
’// 存储过程名称
.CommandText = "upGetUserName"
’// 设置用户编号
.Parameters.Item("@intUserId").Value = 1
’// 执行存储过程
.Execute
’// 取得从存储过程返回的用户名称
Response.Write "用户名:" & .Parameters.Item("@ostrUserName").Value
End With
’// 释放对象
Set adoComm = Nothing
通过以上两步,已经可以创建和使用简单的存储过程了。下面来看一个稍微复杂点的存储过程,以进一步了解存储过程的应用。
三、存储过程的实际应用
用户登录在ASP项目中经常会使用到,但使用存储过程来做验证可能不多,那么做例子,写一个简单的用户登录验证的存储过程。
引用:
Create PROC upUserLogin
@strLoginName NVARCHAR(20),
@strLoginPwd NVARCHAR(20),
@blnReturn BIT OUTPUT
AS
-- 定义一个临时用来保存密码的变量
DECLARE @strPwd NVARCHAR(20)
BEGIN
-- 从表中查询当前用户的密码,赋值给 @strPwd 变量,下面要对他进行比较
Select @strPwd=uLoginPwd FROM uUser Where uLoginName=@strLoginName
IF @strLoginPwd = @strPwd
BEGIN
SET @blnReturn = 1
-- 更新用户最后登录时间
Update uUser SET uLastLogin=GETDATE() Where uLoginName=@strLoginName
END
ELSE
SET @blnReturn = 0
END
用户登录的存储过程建立好了。注意,在一个区域内如果有多条语句时,必需使用BEGIN...END关键字。
引用:
Dim adoComm
’// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象
.ActiveConnection = adoConn
’// 类型为存储过程,adCmdStoredProc = 4
.CommandType = 4
’// 存储过程名称
.CommandText = "upUserLogin"
’// 设置登录名称
.Parameters.Item("@strLoginName").Value = "***"
’// 设置登录密码
.Parameters.Item("@strLoginPwd").Value = "123456"
’// 执行存储过程
.Execute
’// 判断是否登录成功
If .Parameters.Item("@blnReturn").Value = 1 Then
Response.Write "恭喜你,登录成功!"
Else
Response.Write "不是吧,好像错了哦。。。"
End If
End With
’// 释放对象
Set adoComm = Nothing
通过以上的步骤,简单用户登录验证过程也做完了,现在只要把它整合到程序中就可以实现简单的用户登录验证了,关于其他细节就由你自己来处理了。
上面介绍的两个存储过程都是只返回一个值的,下面我们来看一个返回一个记录集的存储过程。
引用:
Create PROC upGetUserInfos
@intUserGroup INT
AS
BEGIN
-- 从数据库中抽取符合条件的数据
Select uName,uGroup,uLastLogin FROM uUser Where uGroup=@intUserGroup
-- 插入一列合计
UNION
Select ’合计人数:’,COUNT(uGroup),NULL FROM uUser Where uGroup=@intUserGroup
END
现在我们来看一下ASP程序的调用。
引用:
Dim adoComm
Dim adoRt
’// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
Set adoRs = CreateObject("ADODB.Recordset")
With adoComm
’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象
.ActiveConnection = adoConn
’// 类型为存储过程,adCmdStoredProc = 4
.CommandType = 4
’// 存储过程名称
.CommandText = "upGetUserInfos"
’// 设置用户组
.Parameters.Item("@intUserGroup").Value = 1
’// 执行存储过程,和以上几个例子不同,这里使用RecordSet的Open方法
adoRs.Open adoComm
’// 显示第一个值
Response.write adoRs.Fields(0).Value
End With
’// 释放对象
Set adoRs = Nothing
Set adoComm = Nothing
⑩ 数据库中存储过程的数据怎么显示出来
//定义一个函数利用存储过程从数据库中读出数据.当然也可以不用存储过程
public
static
system.data.datarow
chaxun1(string
name,string
type)
{
system.data.sqlclient.sqlconnection
cn
=
new
sqlconnection(connectionstring.connection.connectionstring);
sqldataadapter
da
=
new
sqldataadapter();
sqlcommand
cmd
=
new
sqlcommand();
da.selectcommand
=
cmd;
cmd.connection
=
cn;
cmd.commandtype
=
commandtype.storedprocere;
cmd.commandtext
=
"cheng1";
sqlparameter
name
=
new
sqlparameter("@名称",
sqldbtype.nvarchar);
sqlparameter
type
=
new
sqlparameter("@型号",
sqldbtype.nvarchar);
name.value
=
name;
cmd.parameters.add(name);
type.value
=
type;
cmd.parameters.add(type);
dataset
ds
=
new
dataset();
da.fill(ds,
"mytable");
datatable
dtable
=
ds.tables[0];
datarow
dtrow
=
dtable.rows[0];
return
dtrow;//返回读取的这一行数据
}
//调用函数,将值赋给要显示它的控件
this.label6.text
=
chaxun1(combobox1.text,combobox2.text)["数量"].tostring();