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 或 sql 将数据拆分到学生表中的多个列