1

我正在研究 PLSQL 中的单元测试。我建立了一个测试数据库,其中包含一些带有函数和过程的表和包。目前,我正在尝试测试框架“utPLSQL”,但在对 ref 游标进行测试时偶然发现了一个错误。我可以运行我的所有测试,但是 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;
4

3 回答 3

0

我试着让你的例子工作,但不幸的是,我从 utPLSQL 得到了奇怪的错误。

由于 Sourceforge 上的 utPLSQL 的最后一个版本是 2005 年,而 Steven Feuerstein 现在正在开发一个基本相同的商业产品,我建议寻找其他解决方案来对您的 PL/SQL 代码进行单元测试 - 一些链接:

于 2013-04-14T16:15:19.373 回答
0

可能是'RETURN cust_refcur'引起的,utplsql使用的类型存储在varchar2(10)中,试试'return refcur'?-zhaozb

于 2013-08-01T16:01:01.220 回答
0

运行此断言 ( eq_refc_query) 时,utPLSQL 需要临时创建一个表。它通过使用EXECUTE IMMEDIATEwhich 要求用户具有CREATE TABLE直接授予他们的权限,而不是通过角色来做到这一点。

[全面披露:我是 utPLSQL 项目的管理员之一]

于 2013-10-02T00:30:53.003 回答