我正在研究PLSQL中的单元测试。我建立了一个测试数据库,其中包含一些包含函数和过程的表和包。目前我正在尝试测试框架'utPLSQL',但在测试ref游标时偶然发现错误。我可以运行我的所有测试但是参考光标上的测试结果显示“ora-01031权限不足”,这就是我得到的全部内容。如何找到此错误的来源?或者有人遇到过同样的问题吗? utPLSQL的安装很成功,测试框架的所有其他功能都可以使用。
这是我要测试的程序:
FUNCTION F_Get_Customers_RefCurs(P_LASTNAME IN VARCHAR2)
RETURN cust_refcur
IS
cust_result cust_refcur;
BEGIN
OPEN cust_result FOR
SELECT *
FROM CUSTOMERS
WHERE LASTNAME = P_LASTNAME
ORDER BY email ASC;
return(cust_result);
END F_Get_Customers_RefCurs;
我已在包含我的函数的包的规范中声明了cust_refcur,如下所示:
TYPE cust_refcur IS REF CURSOR;
这是测试:
PROCEDURE ut_F_Get_Customers_RefCurs
IS
params utplsql_util.utplsql_params;
BEGIN
utPLSQL_Util.reg_In_Param (1,
'Tester',
params);
UTASSERT.eq_refc_query ('Get customers on last name is successful (refcursor)',
'PK_ORDERS.F_GET_CUSTOMERS_REFCURS',
params,
0,
'SELECT customerid, firstname, lastname, email, password
FROM CUSTOMERS
WHERE LASTNAME = ''Tester''
ORDER BY email ASC');
END;
答案 0 :(得分:0)
我试着让你的例子起作用,但不幸的是,我从utPLSQL得到了奇怪的错误。
由于Sourceforge上的最新版本的utPLSQL是从2005年开始的,而Steven Feuerstein现在正在研究一种基本相同的商业产品,我建议您研究其他解决方案,以便对PL / SQL代码进行单元测试 - 一些链接:
答案 1 :(得分:0)
可能由'RETURN cust_refcur'引起,utplsql使用的类型存储在varchar2(10)中, 尝试'返回refcur'? -zhaozb
答案 2 :(得分:0)
运行此断言(eq_refc_query
)时,utPLSQL需要临时创建一个表。它通过使用EXECUTE IMMEDIATE
来实现这一点,CREATE TABLE
要求用户直接授予他们{{1}}权限,而不是通过角色。
[完全披露:我是utPLSQL项目的管理员之一]