1. oracle 测试存储过程 是哪个权限
Oracle规定,在默认的情况下,在调用存储过程用户的角色不起作用,即在执行存储过程时只有Public权限。所以在调用Create table时,会有权限不足的提示。
只需要使用IR Procere就能很快解决问题啦,把代码修改为如下:
CREATE OR REPLACE PROCEDURE TestProc AUTHID current_user
IS
flag number;
BEGIN
select count(*) into flag from all_tables where table_name='TEMP3';
if (flag=0) then
execute immediate 'create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT';
else
execute immediate 'insert into TEMP3 select * from BUSI_ECONTRACT';
end if;
END ;
执行存储过程,顺利通过。
2. 如何oracle调试存储过程
oracle存储过程调试方法
PL/sql中为我们提供了【调试存储过程】的功能,可以帮助你完成存储过程的预编译与测试。
点击要调试的存储过程,右键选择TEST
如果需要查看变量,当然调试都需要。在右键菜单中选择Add debug information.
start debugger(F9)开始我们的测试,Run(Ctrl+R)
随时在varible List中输入我们想查看的变量
其它:
Step into(Ctrl+N):单步调试,进入下一步
Step over(Ctrl+O):结束该语句
Step out(Ctrl+T):跳出该过程
Run to next exception:进入下一个断点Breakpoint
Toggle Breakpoint设置断点:光标指向一行,Ctrl+B;或鼠标点中该行的行号边缘
--引用自网页链接
3. 如何调试存储过程和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变量旁边的按钮).
4. 如何在PLSQL中测试我自己写的存储过程
1、所谓的存储过程,它的意义就是在服务器上运行的SQL代码。可以通过PL SQL联接服务器来进行调试。
2、PL SQL联接服务器后,找到相应的存储过程,点右键点运行即可进行测试,会弹出对话让你填入需要代入的参数。
3、如果服务器上还没有建立相关存储过程,你要做的当然是使用SQL语句先进行建立。
5. 存储过程 如何调试
最简单 先在查询器里面调试 。完全正确了 才写成存储过程!
6. 这个存储过程如何测试
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
7. PL/SQL中测试存储过程,如何立即输出DBMS_OUTPUT的语句。
要想立即输出就把过程分开一个一个调用。
这样一起调用的匿名块,肯定要等程序执行完才一起输出。
8. sql server测试存储过程
你没必要定义output类型,因为最后的select语句已经把你要的结果输出了
除了实际运行看数据,别的也没什么号验证的了,如果语法不对,创建时就失败了
exec Get_operator @Czy_code=‘code’,@Czy_password='pwd'
执行以下看结果喽
另外查询里面没必要用事务,可以去掉transaction
9. 存储过程的测试一直在执行,关不掉
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#'
10. 存储过程并行测试,如何并发测试
这个问题一般是数据锁造成的,INSERT的时候一般不会遇到这种问题,你在A或者B存储过程中查看一下,一定有UPDATE语句或者 SELECT FOR UPDATE语句,两个并发的请求同时锁一条记录就会造成一条成功另一条失败。
不过按照你的描述最大的可能性是另外一种情况,就是两次INSERT插入的数据某个字段是相同的值,好死不死的,这个相同值的字段又设置了唯一索引或者约束,那么当第一条记录插入成功后第二条记录就会必然失败回滚。