PLSQL迭代对象属性

时间:2012-03-02 19:20:06

标签: sql oracle object plsql

我是PLSQL中的新手(大约一个星期),我有一个包含数百个属性的对象,我需要检查哪些属性被填充并且为null以添加到clob。

可以迭代像

这样的对象属性
for i in object loop
   object.i
end loop;

谢谢!

2 个答案:

答案 0 :(得分:1)

使用标准的PL / SQL构造你不能。您可以使用

遍历集合
for i in mycol.FIRST .. mycol.LAST loop

变量i不是索引,而是迭代集合的一个元素。

如果您的对象是Oracle TYPE,则可以查询系统视图ALL_TYPE_ATTRS。该视图是数据库目录的一部分。您可以在Oracle Reference(而不是Oracle SQL Reference!)中找到它的描述。你得到一个属性名称列表,我不确定,你是否可以动态访问它。

最简单的方法是编写一组帮助程序,根据类型检查属性并管理其值,然后简单地调用此程序。

declare
    procedure Manage_Char_Attr(value IN VARCHAR2, pclob CLOB) IS
    BEGIN
      if value is null then
        ...
    END;
    procedure Manage_Number_Attr(value IN NUMBER, pclob CLOB) IS
    ...
    procedure Manage_Date_Attr(value IN DATE, pclob CLOB) IS
    ...

    CLOB myclob

begin
    -- initialize your CLOB
    ... 
    -- manage attributes
    Manage_Char_Attr(attr1, myclob); -- let attr1 is a string
    Manage_Char_Attr(attr2, myclob); -- let attr2 is a string
    Manage_Numvber_Attr(attr3, myclob); -- let attr3 is a number
    Manage_Date_Attr(attr4, myclob); -- let attr4 is a date
    ...
end;

答案 1 :(得分:0)

是的,请查看文档here