如何创建 APEX_COLLECTION?

And*_*ler 1 oracle-sqldeveloper oracle-apex oracle12c

我想在 Oracle SQL Developer 中为我的 apex web 应用程序创建一个 apex_collection。这是我的代码:

 apex_collections.create_or_truncate_collection('TEST');
Run Code Online (Sandbox Code Playgroud)

运行语句后,我得到以下信息:

在此处输入图片说明

如果我输入选择语句:

SELECT *
  FROM apex_collections
 WHERE collection_name = 'TEST';
Run Code Online (Sandbox Code Playgroud)

之后,我得到了这个:

在此处输入图片说明

在我看来,没有创建集合,尽管没有错误代码。我究竟做错了什么?为什么没有创建集合?我也尝试在 Oracle APEX 的 SQL Workshop 中运行该语句,但该命令在那里未知。我正在使用 Oracle 12c 版本。

Adr*_*n P 5

您需要一个有效的 APEX 会话来创建集合。如果您使用的是 APEX 18.1 或更高版本,请使用该过程apex_session.create_session(请参阅文档)创建一个。确保 app_id 对您的架构分配到的工作区有效。

对于 18.1 之前的任何内容,OraOpenSource oos-utils都有一个执行相同操作的过程:(oos_util_apex.create_session请参阅代码)。您将需要安装 oos-utils,或者至少在您的架构中编译这个包。或者,复制此过程中包含的活动。

更新:另外,我刚刚注意到杰夫史密斯的评论。您需要向集合中添加成员才能获得有意义的结果。

begin
  apex_session.create_session(
    p_app_id => 100
    , p_page_id => 1
    , p_username => 'somebody'
  );
end;
/

select * from apex_collections; -- shows nothing

begin
  apex_collection.create_or_truncate_collection(
    p_collection_name => 'test'
  );

  apex_collection.add_member(
    p_collection_name => 'test'
    , p_c001 => 'test row'
  );
end;
/

select * from apex_collections; -- shows one record
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用 SQLDEV 对 APEX 会话中的集合进行故障排除,则您需要使用apex_session.attachoos_util_apex.join_session过程,具体取决于您运行的 APEX 版本。使用分配给浏览器会话的 APEX 会话 ID。哈。