PL/SQL 用表中的数据填充对象

Posted

技术标签:

【中文标题】PL/SQL 用表中的数据填充对象【英文标题】:PL/SQL Fill object with data from tables 【发布时间】:2015-03-20 07:10:42 【问题描述】:

我在 pl/sql 中创建了自定义对象。我想要做的是创建从表中传递id 的对象,并用一行中的数据填充对象属性(由此id 指定)。这该怎么做?我正在使用 oracle 10g。

我的类型是这样的:

CREATE OR REPLACE TYPE userType AS OBJECT(
    id number,
    name varchar2(100),
    nickname varchar2(100),
    email varchar2(100),
    CONSTRUCTOR FUNCTION userType(userId number) RETURN SELF AS RESULT
);

还有type body声明:

CREATE OR REPLACE TYPE BODY userType AS
    CONSTRUCTOR FUNCTION userType(userId number) RETURN SELF AS RESULT
    AS
    BEGIN
        self.id := userId;
        self.name := ???;    --<- need help there  
        self.nickname := ??? --(something like select name from userType where id = userId)                   
        (and so on)
        RETURN;
    END;
END;

表格列与userType 属性同名。

【问题讨论】:

【参考方案1】:

我认为你应该能够做到以下几点:

CREATE OR REPLACE TYPE BODY userType AS
    CONSTRUCTOR FUNCTION userType(userId number) RETURN SELF AS RESULT
    AS
    BEGIN
        self.id := userId;
        SELECT name, nickname INTO self.name, self.nickname FROM user_table WHERE id = userId;                   
        RETURN;
    END;
END;

虽然我不确定这是正确还是最好的方法。

【讨论】:

@Exhausted “任何答案”是什么意思?当我测试它时它对我来说很好(虽然我使用的是 11g) 这正是我要找的,谢谢! :) 它工作正常而且非常简单:)【参考方案2】:

我认为你正在尝试这样做

SQL> desc employ
 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------------------

 ID                                                 NUMBER
 NAME                                               VARCHAR2(50)


SQL> select * from employ
  2  ;

        ID NAME
---------- --------------------------------------------------
         1 Exhaust
         2 Object
         3 Fill



SQL> ed
Wrote file afiedt.buf

  1  create or replace type usertype as object
  2  (
  3  id number,
  4  name varchar2(50),
  5  constructor function usertype(userId number) return self as result
  6* );
SQL> /

Type created.


SQL> ed
Wrote file afiedt.buf

  1  create or replace type body usertype as
  2  constructor function usertype(userid number) return self as result
  3  as
  4  outvar employ.name%type;
  5  begin
  6  self.id := userid;
  7  select name into outvar from employ where id = userid;
  8  self.name := outvar;
  9  return;
 10  end;
 11* end;
SQL> /

Type body created.



SQL> declare
  2  v_usertype usertype;
  3  begin
  4  v_usertype := usertype(1);
  5  dbms_output.put_line(v_usertype.name);
  6  end;
  7  /
Exhaust

PL/SQL procedure successfully completed.

【讨论】:

以上是关于PL/SQL 用表中的数据填充对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pl/sql 中的游标将多列数据插入包含单列的表中?

将 XML 数据存储在表中的 PL/SQL 过程抛出错误(23,102):PL/SQL:ORA-00907:缺少右括号

如何使用 pl/sql 为多行填充相同的值

使用 pl/sql 或 sql 将数据拆分到学生表中的多个列

Oracle PL/SQL 程序在源表中拆分逗号分隔的数据并推送到目标表中

如何在 PL SQL 中添加带有 INSERT INTO SELECT 的日期?