是否可以将对象作为参数传递给PL SQL包过程? [英] Is it possible to pass objects to PL SQL package procedure as parameters?

查看:93
本文介绍了是否可以将对象作为参数传递给PL SQL包过程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让我们以.NET MVC为例,可以使用自定义对象甚至是此类对象的数组的参数来定义ActionResult:

Let's take an example from .NET MVC where it is possible to define ActionResult with a parameter that is custom object or even an array of such objects:

方法:

public ActionResult Blah(Person[] people) {
  // ...
}

和相应的HTML:

<input type="text" name="people[0].FirstName" value="George" />
<input type="text" name="people[0].LastName" value="Washington" />
<input type="text" name="people[1].FirstName" value="Abraham" />
<input type="text" name="people[1].LastName" value="Lincoln" />
<input type="text" name="people[3].FirstName" value="Thomas" />
<input type="text" name="people[3].LastName" value="Jefferson" />

此示例摘自博客

我想知道是否可以在PL SQL中执行类似的操作,例如:

I want to know if it is possible to do something similar in PL SQL, like:

PROCEDURE blah(param1 IN Person_type)
IS
BEGIN
  -- do whatever y like
END;

其中person_type定义对象,记录或类似的复杂结构.

where person_type defines object, record or similar complex structure.

推荐答案

CREATE OR REPLACE TYPE t_parsed_name as object (
name_prefix varchar2(50),
name_first varchar2(50),
name_middle varchar2(50),
name_last varchar2(100),
name_suffix varchar2(50)
);

CREATE OR REPLACE TYPE T_PARSED_NAME_ARY as table of t_parsed_name;

create or replace procedure test_parsed_names(i_parsed_name_ary in t_parsed_name_ary) as
    idx pls_integer;
begin
    idx := i_parsed_name_ary.first;
    loop
        exit when idx is null;
        dbms_output.put_line('First name: ' || i_parsed_name_ary(idx).name_first || ', Last name: ' || i_parsed_name_ary(idx).name_last);
        idx := i_parsed_name_ary.next(idx);
    end loop;
end;

----------------------------------------
-- example using above procedure
declare
    l_parsed_name t_parsed_name;
    l_parsed_name_ary t_parsed_name_ary;
begin
  l_parsed_name_ary := t_parsed_name_ary();
  l_parsed_name_ary.extend(3);

  -- create some parsed names and add to array
  l_parsed_name := t_parsed_name('Mr','Joe','T','Blow','Jr');
  l_parsed_name_ary(1) := l_parsed_name;
  l_parsed_name := t_parsed_name('Mrs','Jane','','Doe','');
  l_parsed_name_ary(2) := l_parsed_name;
  l_parsed_name := t_parsed_name('','Betty','','Boop','');
  l_parsed_name_ary(3) := l_parsed_name;

  -- test the array (call procedure with object type array parameter)
  test_parsed_names(l_parsed_name_ary);
end;

这篇关于是否可以将对象作为参数传递给PL SQL包过程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆