存储过程的测试
1. 这个存储过程如何测试
CREATE PROCEDURE [dbo].[Test]
@TableName char(10),
@TableValue bigint
AS
DECLARE @sql nvarchar(4000)
BEGIN
SET NOCOUNT ON;
--如果TableName表存在则插入一条TableValue
SET @sql=
N'if exists
(select * from sysobjects
where id = object_id(N''[dbo].['+@TableName+']'')
and OBJECTPROPERTY(id, N''IsUserTable'') = 1)
INSERT INTO '+@TableName+'(TableValue) VALUES(cast('+@TableValue+') as nvarchar(20))'
EXEC sp_executesql @sql,N'@TableName char(10),@TableValue bigint',
@TableName,@TableValue
END
2. 如何测试mysql触发器和存储过程
1.
为了测试触发器和存储过程,首先建立一张简单的表:
复制代码
代码如下:
CREATE
TABLE
`airuser`
(
`userId`
int(11)
NOT
NULL
AUTO_INCREMENT,
`username`
varchar(128)
NOT
NULL,
PRIMARY
KEY
(`userId`)
)ENGINE=InnoDB
DEFAULT
CHARSET=utf8
2.
为该表的插入操作,创建一张记录表:
复制代码
代码如下:
CREATE
TABLE
`airuser_record`
(
`id`
int(11)
NOT
NULL
AUTO_INCREMENT,
`username`
varchar(45)
DEFAULT
NULL,
`edittime`
timestamp
NULL
DEFAULT
NULL,
`edittype`
varchar(45)
DEFAULT
NULL,
PRIMARY
KEY
(`id`)
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8
3.
编写一个插入操作的触发器:
复制代码
代码如下:
DROP
TRIGGER
insert_trigger;
delimiter
|
CREATE
TRIGGER
insert_trigger
BEFORE
INSERT
ON
airuser
FOR
EACH
ROW
BEGIN
INSERT
INTO
airuser_record
SET
username
=
NEW.username,
edittime=now(),
edittype='insert';
END;
SHOW
TRIGGERS;
4.
为批量插入编写存储过程:
复制代码
代码如下:
DROP
procere
createUsers;
delimiter
|
create
procere
createUsers(IN
count
int)
begin
declare
i
int;
set
i=0;
while
i<count
do
insert
into
airuser
set
username=concat('user_',i);
set
i=i+1;
end
while;
end;
show
procere
status;
5.
调用存储过程,验证存储过程是工作的,并验证在插入记录前,触发器能正确被触发:
复制代码
代码如下:
call
createUsers(10);
6.
最后通过插入记录表再次验证:
复制代码
代码如下:
SELECT
*
FROM
mars_jpa.airuser_record;
3. 如何在PLSQL中测试我自己写的存储过程
1、所谓的存储过程,它的意义就是在服务器上运行的SQL代码。可以通过PL SQL联接服务器来进行调试。
2、PL SQL联接服务器后,找到相应的存储过程,点右键点运行即可进行测试,会弹出对话让你填入需要代入的参数。
3、如果服务器上还没有建立相关存储过程,你要做的当然是使用SQL语句先进行建立。
4. sql server测试存储过程
你没必要定义output类型,因为最后的select语句已经把你要的结果输出了
除了实际运行看数据,别的也没什么号验证的了,如果语法不对,创建时就失败了
exec Get_operator @Czy_code=‘code’,@Czy_password='pwd'
执行以下看结果喽
另外查询里面没必要用事务,可以去掉transaction
5. oracle plsql怎么调试存储过程
1、首先是编写存储过程,编译无误;
2、添加debug信息。为了能够单步跟踪存储过程,需要为其所在的包添加debug信息,右键点击需要调试的存储过程名称,在弹出菜单中选中[add debug information],这样就为包体添加了调试信息;
3、选择需要调试的存储过程名称,点击右键,在弹出菜单中 选择[Test],进去测试窗口,测试窗口中有为了测试该存储过程自动所产生的代码,当然你也可以自己另外加入和修改代码,自动生成的代码已经足够了。
6. 在pl/sql中怎么测试存储过程
第一 create存储过程,此处报错,则是语法错误居多,需要根据情况修正语句。
第二 执行存储过程,验证执行结果,在Proceres包下 找到你自己创建的存储过程,右键点击测试按钮,出现测试窗口
第一个绿色箭头,意思直接跑起来,第二个进入男色方框,意思进入此模块内,第三个跳出当前运行模块,第四个跳转入错误点。
多用第二个
7. 如何测试mysql触发器和存储过程
测试衡隐衫触发器的主要方法是:
手工或通过程序向触发器对应的源表插入或更新咐腔数据,观察数据库是否报错,如果没有错误则看一下数据是否准确更新到数据库了
测试存储过程的主要方法有:
通过客携锋户端进行调用,java用的是CallabledStatement进行调用
通过SQL语句调用,格式是:call mypro(参数);
8. 存储过程的测试一直在执行,关不掉
1、存储过程中是否有 LOOP ?
如果有 的在end loop 添加 EXIT WHEN 游标名%NOTFOUND (意思是如果没有这个游标,就跳出)
2、没有loop 的话
手动停止掉当前的存储过程吧。语句如下:
--先查运行的存储过程sid
select /*rule*/ sid from v$access where object='存储过程名'
--通过sid 找到serial
select sid ,serial#,paddr from v$session where sid='上一句查到的sid'
--kill 掉存储过程
alter system kill session 'sid','serial#'
9. 如何调试存储过程和package
1.打开PL/SQL Developer
如果在机器上安装了PL/SQL Developer的话,打开PL/SQL Developer界面
输入用户名,密码和host名字,这个跟在程序中web.config中配置的完全相同,点击确定
找到需要调试的存储过程所在的包(Package bodies),如PACK_ACTIVITY,点击右键,在弹出菜单中选择[查看],得到包中的所有存储过程和他们的代码.
2.添加debug信息
为了能够单步跟踪存储过程,需要为其所在的包添加debug信息,右键点击需要调试的包,在弹出菜单中选中[添加调试信息].
这样就为包体添加了调试信息。
3.调试存储过程
现在所有的准备工作都做好了,可以调试跟踪存储过程了。
选择需要调试的存储过程,点击右键,在弹出菜单中选择[测试],进去测试窗口. 测试窗口中有为了测试该存储过程自动所产生的代码,当然你也可以自己另外加入和修改代码,对于我们目前只是为了调试存储过程,自动生成的代码已经足够了。接着按照如下的步骤进行调试。
(1)添加存储过程所需要的参数,我们项目中的大多数存储过程都是需要参数的,参数可以在测试窗口右下部分输入。
如:GetPanNO_New需要一个输入参数v_employeeid,我们输入180,输出参数是mycursor,是查看结果的,不需要输入任何值。
(2)开始调试,点击[调试]菜单-[开始](或者按F9),就进去调试模式了,程序开始停在begin这一行.
(3)以后的调试过程跟我们熟悉的的调试过程就一样了:
运行(Ctrl+R)
单步进入(Ctrl+N)
单步跳过(Ctrl+O)
单步退出(Ctrl+T)
或者点击debug工具条上的按扭: 当按Ctrl+N进去存储过程的源代码中后
在这个窗口中可以查看过程中的变量值和堆栈。
(4)调试运行完了后,可以查看结果如下(点击mycursor变量旁边的按钮).
10. 存储过程并行测试,如何并发测试
这个问题一般是数据锁造成的,INSERT的时候一般不会遇到这种问题,你在A或者B存储过程中查看一下,一定有UPDATE语句或者 SELECT FOR UPDATE语句,两个并发的段悔蔽请求同时锁一条记录就会造成一条成功另一条失败。
不过按照你的描述最大的可能性是另外一种情况,就是两握州次INSERT插入的前陪数据某个字段是相同的值,好死不死的,这个相同值的字段又设置了唯一索引或者约束,那么当第一条记录插入成功后第二条记录就会必然失败回滚。