如何在使用utPLSQL对ref游标执行测试时找到ora-01031的权限不足?

时间:2013-04-12 09:40:13

标签: unit-testing plsql

我正在研究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;

3 个答案:

答案 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项目的管理员之一]