PLSQL перебирает атрибуты объекта - PullRequest
0 голосов
/ 02 марта 2012

Я новичок в PLSQL (около недели), и у меня есть объект с сотнями атрибутов, и мне нужно проверить, какие из них заполнены и имеют значение null, чтобы добавить его в clob.

Возможно выполнить итерациюв атрибутах объекта, таких как

for i in object loop
   object.i
end loop;

спасибо!

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Используя стандартную конструкцию PL / SQL, вы не можете. Вы можете перебрать коллекцию, используя

for i in mycol.FIRST .. mycol.LAST loop

Переменная i - не индекс, а один элемент повторяющейся коллекции.

Если ваш объект - ТИП Oracle, вы можете запросить системное представление 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;
0 голосов
/ 03 марта 2012

Да, ознакомьтесь с документацией здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...