如何在PLSQL Developer中测试包含DML的Oracle函数?
选择不包含DML的Oracle存储函数的返回值可以通过简单地选择函数来完成:如何在PLSQL Developer中测试包含DML的Oracle函数?
select function_name() from dual;
如果函数包含DML(在这种情况下,一些插入来记录传递给它的参数功能),不允许上述查询。 (ORA-14551)
如何选择/查看此功能的返回值?
如果我在plsql开发人员中选择“test”,plsqldev会生成如下内容:
declare
-- Non-scalar parameters require additional processing
result xmltype;
begin
-- Call the function
result := find_person(as_surname => :as_surname,
as_given => :as_given,
ad_birth_date_from => :ad_birth_date_from,
ad_birth_date_to => :ad_birth_date_to,
as_gender => :as_gender);
end;
如何查看“result”变量的值?开始/结束块内的
select result from dual;
生成
ORA-06550: PLS-00428: an INTO clause is expected in this SELECT statement
加入
pragma autonomous_transaction
给函数在declare
块允许它被从双
select find_person(arguments) from dual;
选择自t他在函数中的DML只是用来记录传递给函数的参数,这是可以接受的使用autonomous_transaction,否则应该避免
pragma_autonomous_transaction是一种方法。
但出影响您的原始数据库来测试,有一些开源工具来测试像DBUnit的,utPLSQL等
您的SQL/PLSQLs这些单元测试工具SQL和PLSQL
的PLSQL开发人员的测试屏幕有两个部分。在上面你会发现你在问题中显示的代码。测试函数生成的代码已将函数的变量替换为绑定变量::as_surname,:as_given等。 在屏幕的下半部分,可以输入这些参数的值并查看结果的值。
我还没有和XMLType的工作,但文档提供了以下选项:
dbms_output.put_line(result.getStringVal());
变“结果”为“:结果”,并在变量的左上角点击小箭头啄格。 它应该添加“结果”作为绑定varibale,您可以指定其类型。
在你的情况下,最好的选择是clob或PL/SQL字符串。
而且你的脚本可能看起来像这样:
declare
result xmltype;
begin
result := find_person(as_surname => :as_surname,
as_given => :as_given,
ad_birth_date_from => :ad_birth_date_from,
ad_birth_date_to => :ad_birth_date_to,
as_gender => :as_gender);
if result is null then
:result := null;
else
:result := result.GetClobVal();
end if;
end;
正如你所看到的,它基本上是什么PL/SQL开发已经为您创建,除了如何在一个方法返回的XMLType处理PL/SQL Dev可以理解。
,如果你想返回一个结果,你可以返回光标:
begin
...
open :someCursor for
select 1 from ...;
...
你必须在变量表格为“光标”改变“someCursor”的类型,或者没有去上班。
+1:出色的响应 – kurosch 2009-12-21 22:27:23
SQL Developer与DBMS_OUTPUT工作得很好..它有一个单独的标签旁边的脚本输出,结果等只需点击“启用输出”按钮,并在您的代码中使用DBMS_Output.Put_Line(result);
。
真的,你应该有一个被称为 – 2009-12-13 04:30:51
的日志程序使用autonomous_transaction进行日志记录通常是一个坏主意。你必须提交日志,然后不能总是看到用户实际上做了什么,如果主事务回滚。 – jva 2009-12-14 10:53:00
-1:这并不回答被问到的问题 – kurosch 2009-12-21 22:25:40