当前位置:首页 » 存储配置 » 存储过程传入参数

存储过程传入参数

发布时间: 2023-07-12 14:41:00

① 如何向存储过程传递一个数组参数

方法一 分割

例:通过sql Server存储过程传送数组参数删除多条记录

eg. ID 值为'1,2,3' 以下存储过程就是删除表中id号为1,2,3的记录:

CREATE PROCEDURE DeleteNews
@ID nvarchar(500)
as
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @TId int
Set @PointerPrev=1

while (@PointerPrev < LEN(@ID))
Begin
Set @PointerCurr=CharIndex(',',@ID,@PointerPrev)
if(@PointerCurr>0)
Begin
set @TId=cast(SUBSTRING(@ID,@PointerPrev,@PointerCurr-@PointerPrev) as int)
Delete from News where ID=@TID
SET @PointerPrev = @PointerCurr+1
End
else
Break
End
--删除最后一个,因为最后一个后面没有逗号,所以在循环中跳出,需另外再删除
set @TId=cast(SUBSTRING(@ID,@PointerPrev,LEN(@ID)-@PointerPrev+1) as int)
Delete from News where ID=@TID
GO

这个方法麻烦不?于是又有另外一种方法——临时表

方法二 Table对象

传3个参数,都是数组形式还有时间类型用存储过程更新

@Oid = 1,2,3,4

@Did = 111,222,333,444

@DateArr = '2007-1-1,2007-1-2,2007-1-3,2007-1-4'

CREATE proc Test999

@Oid nvarchar(1000) --ID1

,@Did nvarchar(1000) --ID2

,@DateArr nvarchar(1000) --日期

AS

DECLARE @id1s varchar(8000), @id2s varchar(8000), @dates varchar(8000)

set @id1s=@Oid

set @id2s=@Did

set @dates = @DateArr

-- 调用函数实现处理

SELECT @id1s=@id1s, @id2s=@id2s,@dates = @dates

UPDATE A SET terminate_time = B.dt

FROM [Table] A,(

SELECT

id1 = CONVERT(int, Desk_id.value),

id2 = CONVERT(int, room_id.value),

dt = CONVERT(datetime, terminate_time.value)

FROM dbo.f_splitstr(@id1s) Desk_id, dbo.f_splitstr(@id2s) room_id, dbo.f_splitstr(@dates) terminate_time

WHERE Desk_id.id = room_id.id

AND Desk_id.id = terminate_time.id

) B

WHERE A.Desk_id = B.ID1 AND A.room_id = B.ID2

GO这个还用到一个函数f_splitstr

CREATE FUNCTION dbo.f_splitstr(

@str varchar(8000)

)RETURNS @r TABLE(id int IDENTITY(1, 1), value varchar(5000))

AS

BEGIN

DECLARE @pos int

SET @pos = CHARINDEX(',', @str)

WHILE @pos > 0

BEGIN

INSERT @r(value) VALUES(LEFT(@str, @pos - 1))

SELECT

@str = STUFF(@str, 1, @pos, ''),

@pos = CHARINDEX(',', @str)

END

IF @str > ''

INSERT @r(value) VALUES(@str)

RETURN

END

② ORACLE中如何为存储过程传递参数

给你一个 传递参数的例子

SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
8 p_out_val := 'A';
9 p_inout_val := 'B';
10 END HelloWorld2;
11 /

Procere created.

SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10) := '~Hi~';
4 BEGIN
5 HelloWorld2('Edward', p_outval, p_inoutval);
6
7 dbms_output.put_line('p_outval=' || p_outval);
8 dbms_output.put_line('p_inoutval=' || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=B

PL/SQL procere successfully completed.

SQL>

③ sql 存储过程 怎么传入参数

执行带参数的存储过程的方法如下:
Exec sp_configure 'allow updates',1 --允许更新系统表。
exec dbo.User_ChangeObjectOwnerBatch 'OldOwner','dbo'
以上是两个例子。
SQL Server中执行带参数的存储过程的方法是:
EXEC 存储过程名字 '参数1','参数2',数值参数
EXEC 是一个关键字。
字符串参数使用单引号括起来,数值参数不需要使用单引号

④ oracle存储过程,IN OUT 类型的参数怎么传参数

in out类型参数是过程运行开始会把参数值传入过程,运行结束后会把参数值再传出去。
比如说过程test(v_cs in out number);功能为把带入的参数加1;
v_num:=1;
test(v_num);
dbms_output.put_line(v_num);
将输出2;

⑤ oracle 存储过程怎么传参数

create
table
p_proc(pid
number(2),pname
varchar2(20),pname_class
varchar2(20));
--用于存储存储过程和参数名的表并插入四条数据,insert
into
p_proc
values(1,'a','v1');insert
into
p_proc
values(2,'b','v2');insert
into
p_proc
values(3,'c','v3');insert
into
p_proc
values(4,'d','v4');
四个存储过程的的状况为:
create
or
replace
procere
v1(v_para
varchar2)asbegin
dbms_output.put_line(v_para);end;create
or
replace
procere
v2(v_para
varchar2)asbegin
dbms_output.put_line(v_para);end;create
or
replace
procere
v3(v_para
varchar2)asbegin
dbms_output.put_line(v_para);end;create
or
replace
procere
v4(v_para
varchar2)asbegin
dbms_output.put_line(v_para);end;如下调用存储过程的存储为(请忽略一些测试输出):

⑥ 如何给SQLSERVER存储过程传递数组参数

数组不能传递,变通的解决办法是有的
思路如下:
1、将数组转换为字符串格式(例如:a,b,c,d)
2、在数据库内创建字符串分割为行的表值函数
3、若是需要将一个二维数组传递的话,需要将每列数据都格式化为1的方式,然后再用2的方式转换为行,再将转换后的数据组合为一个表
4、你就可以直接进行插入、编辑、删除或查询操作了。

⑦ 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;

SET autocommit = 0;
IF EXISTS (
SELECT
*
FROM
t_user_voucher tuv,
t_voucher tv
WHERE
tv.id = tuv.voucherid
AND tv.batch =@batch_a
) THEN

SET result = 1;-- 已存在

SELECT
result;

ELSE

IF @c_count_a > 0 THEN

IF (
TO_DAYS(@endate_a) - TO_DAYS(NOW())
) > 0 THEN

⑧ SQL中存储过程参数传递有哪几种方法如何获取存储过程的返回值

参数传递?
参数有in参数、out参数、in out参数
变量可用set和select赋值

获取返回值只需设置变量、到时输出就行

单行数据定义固定变量数、
如果结果是数据集、要用游标cursor

⑨ 执行存储过程怎么传入参数

在Oracle中定义存储过程的时候有定义传入参数的个数和类型的。

createprocerepro_name(v_para1invarchar2,v_para2invarchar2)

调用的时候:

declare
v_para1varchar2(30):='parameter1';
v_para2varchar2(30):='parameter2';
begin
pro_name(v_para1,v_para2);
end;
/
热点内容
手机网页缓存视频 发布:2025-02-03 23:38:48 浏览:826
agnes算法 发布:2025-02-03 23:38:05 浏览:29
私密上传在哪 发布:2025-02-03 23:33:04 浏览:1000
切冰解压 发布:2025-02-03 23:30:36 浏览:764
解压搅拌声 发布:2025-02-03 23:11:35 浏览:831
服务器硬盘误拔了怎么办 发布:2025-02-03 23:05:26 浏览:868
易手遥控连接密码是多少 发布:2025-02-03 22:44:26 浏览:167
sql安装程序配置服务器失败 发布:2025-02-03 22:44:25 浏览:588
可以写脚本的点击器 发布:2025-02-03 22:44:22 浏览:616
c算法代码 发布:2025-02-03 22:42:20 浏览:863