Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Несколько вопросов по коллекциям / 8 сообщений из 8, страница 1 из 1
03.05.2011, 18:47
    #37244306
rockclimber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по коллекциям
1. Тут кто-то недавно рекомендовал сайт applicationexpress.ru. Я туда зашел, посмотрел видео по использованию коллекций. На видео показан пример интернет-магазина, где корзина реализована через коллекцию. Появился такой вопрос: если два пользователя работают с сайтом одновременно и одновременно у каждого из них создается коллекция "MyCollection" - это будут все-таки разные коллекции? Т. е. каждый пользователь будет видеть только свою коллекцию "MyCollection"?

2. Пользователь может в любой момент закрыть браузер, и может получиться так, что код наполнения коллекции выполнится, а код очистки - нет. Коллекция будет удалена автоматически или нет?
...
Рейтинг: 0 / 0
07.05.2011, 20:51
    #37250932
PavelDart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по коллекциям
Вопросы, наверное, уже не актуальны, но всё же :
по созданию коллекции - "Use this procedure to create an empty collection that does not already exist. If a collection exists with the same name for the current user in the same session for the current Application ID, an application error is raised."
то есть, в принципе, это будут разные коллекции.
по удалению - удаляется вручную APEX_COLLECTION.DELETE_COLLECTION
...
Рейтинг: 0 / 0
07.05.2011, 22:17
    #37250995
rockclimber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по коллекциям
PavelDart,

спасибо за ответ, я уже и забыл про эти вопросы...
Я почитал про коллекции, увидел упоминания сессий и тоже подумал, что разные пользователи не будут мешать друг другу.
Потом зашел в раздел "SQL Commands", там выполнил команду, создающую коллекцию, добавил элемент, убедился, что он там есть, потом сделал логаут, зашел заново, попробовал посмотреть содержимое коллекции - APEX выдал "no data found".
Кстати, потом уже где-то в документации увидел, что коллекция живет до конца сессии, но не могу найти теперь это место.
...
Рейтинг: 0 / 0
08.07.2011, 10:38
    #37342710
DanJa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по коллекциям
Добрый день!
Есть проблема с созданием коллекции.
На странице есть PL/SQL блок с таким содержанием:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
declare
  depts_str varchar2( 200 );
  dept_id number;
  depts_str_empty number;
  
begin

if :p6_to_who= 1  then
begin
  htp.p('Здрасьте!<br><br>');
  depts_str:=:p6_dept;
  htp.p('p6_dept: ' || :p6_dept || '<br>');
  depts_str_empty:= 0 ;
  APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION('depts_array');
  htp.p('<br>Перебираем p6_dept:<br><br>');
  LOOP
  begin
    if instr(depts_str,':')!= 0  then
      begin
        dept_id:=to_number(substr(depts_str, 1 ,instr(depts_str,':')- 1 ));
        htp.p('dept_id: ' || dept_id || '<br>');
        APEX_COLLECTION.ADD_MEMBER('depts_array',dept_id);
        depts_str:=substr(depts_str,instr(depts_str,':')+ 1 );
        htp.p('depts_str: ' || depts_str || '<br><br>');
      end;
    else
      begin
        htp.p('dept_id (остаток depts_str): ' || depts_str || '<br><br>');
        APEX_COLLECTION.ADD_MEMBER('depts_array',depts_str);
        depts_str_empty:= 1 ;
      end;
    end if;
    htp.p('depts_str_empty: ' || depts_str_empty || '<br><br>');
    EXIT WHEN depts_str_empty= 1 ;
  end;  
  END LOOP;

  

end;
end if;
end;
Смотрю результат заполнения коллекции в SQL Workshop'е:
Код: plaintext
select * from apex_collections
Результат - No data found!
Собственно вопрос - почему не заполняется коллекция?
Пробовал в SQL Workshop'e:
Код: plaintext
1.
2.
3.
begin
  APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION('test');
  APEX_COLLECTION.ADD_MEMBER('test', 1 );
end;

Код: plaintext
select * from apex_collections;

Результатом выдовалась одна строка с добавленным мембером.
...
Рейтинг: 0 / 0
08.07.2011, 10:43
    #37342722
DanJa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по коллекциям
И еще, как я понял из описания процедуры APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION
Use this procedure to create a collection. If a collection exists with the same name for the current user in the same session for the current Application ID, all members of the collection are removed. In other words, the named collection is truncated.
эта процедура заменяет блок
Код: plaintext
1.
2.
3.
if apex_collection.collection_exists('test')
then apex_collection.delete_collection('test');
end if;
apex_collection.create_collection('test');
...
Рейтинг: 0 / 0
08.07.2011, 11:21
    #37342829
DanJa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по коллекциям
DanJa
Код: plaintext
1.
2.
3.
if apex_collection.collection_exists('test')
then apex_collection.delete_collection('test');
end if;
apex_collection.create_collection('test');

Кстати, я и так тоже пробовал - результат такой же.
...
Рейтинг: 0 / 0
08.07.2011, 15:10
    #37343545
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по коллекциям
DanJa,

слишком большой и неудачный пример.
0. Работа с БД через PL/SQL должна идти в процессах, а не в регионах. PL/SQL Dynamic Content - это вывод содержимого , а не изменение данных. Так что идеологически лишним будет в коде региона менять коллекцию. :)
1. Чтобы разобрать строку на коллекцию элементов, воспользуйтесь APEX_UTIL.STRING_TO_TABLE .
2. SQL Commands - это другое приложение. Коллекции доступны в пределах того приложения, в котором они созданы. Гляньте в DDL представления <apex_schema>.wwv_flow_collections, если хотите увидеть все фильтры доступа.

DanJaИ еще, как я понял из описания процедуры APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION
Use this procedure to create a collection. If a collection exists with the same name for the current user in the same session for the current Application ID, all members of the collection are removed. In other words, the named collection is truncated.
эта процедура заменяет блок
Код: plaintext
1.
2.
3.
if apex_collection.collection_exists('test')
then apex_collection.delete_collection('test');
end if;
apex_collection.create_collection('test');


Они не равнозначны. APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION при наличии коллекции не удаляет её, просто убирает все элементы из коллекции.
...
Рейтинг: 0 / 0
08.07.2011, 16:00
    #37343684
DanJa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько вопросов по коллекциям
Спасибо за пояснения!
Правда я почему и создал регион PL/SQL, потому что такая же беда была в процессе, отрабатывающего при нажатии кнопки.
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Несколько вопросов по коллекциям / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]