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

2. Пользователь может в любой момент закрыть браузер, и может получиться так, что код наполнения коллекции выполнится, а код очистки - нет. Коллекция будет удалена автоматически или нет?
...
Рейтинг: 0 / 0
Несколько вопросов по коллекциям
    #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
Несколько вопросов по коллекциям
    #37250995
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelDart,

спасибо за ответ, я уже и забыл про эти вопросы...
Я почитал про коллекции, увидел упоминания сессий и тоже подумал, что разные пользователи не будут мешать друг другу.
Потом зашел в раздел "SQL Commands", там выполнил команду, создающую коллекцию, добавил элемент, убедился, что он там есть, потом сделал логаут, зашел заново, попробовал посмотреть содержимое коллекции - APEX выдал "no data found".
Кстати, потом уже где-то в документации увидел, что коллекция живет до конца сессии, но не могу найти теперь это место.
...
Рейтинг: 0 / 0
Несколько вопросов по коллекциям
    #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
Несколько вопросов по коллекциям
    #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
Несколько вопросов по коллекциям
    #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
Несколько вопросов по коллекциям
    #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
Несколько вопросов по коллекциям
    #37343684
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за пояснения!
Правда я почему и создал регион PL/SQL, потому что такая же беда была в процессе, отрабатывающего при нажатии кнопки.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Несколько вопросов по коллекциям
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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