交互式网格与动态SQL技术详解
立即解锁
发布时间: 2025-08-15 00:17:52 阅读量: 5 订阅数: 10 


Oracle APEX 20应用开发精要
### 交互式网格与动态 SQL 技术详解
#### 1. 网格进程
每个网格区域都有其自身的 ARP 进程,该进程用于实现该区域的数据库修改操作。若要为网格添加额外功能,则需创建额外的进程。
对于交互式网格的进程,需针对网格中每一行修改执行一次。以 LogChanges 进程为例,在修订后的员工数据录入页面中,每当用户点击删除、插入或更新按钮时,该进程会向 EMPLOG 表插入一条记录,记录请求、用户和日期信息。
若要在交互式网格页面重新创建此进程,其相关进程属性与之前基本相同,只是“可编辑区域”属性值应为“Employees”,这表明进程执行时,代码将应用于 Employees 网格中每一行更改。
测试该进程时,可对 Employees 网格进行修改,然后在 SQL 工作台查看 EMPLOG 表。不过,表中记录的“Request”值不够详细,可对进程代码进行修订,使“Request”字段值包含行状态和修改行的 EmpNo 值。以下是修订后的代码:
```sql
declare
v_request varchar(20);
begin
case :APEX$ROW_STATUS
when 'U' then v_request := 'Update ';
when 'C' then v_request := 'Insert ';
when 'D' then v_request := 'Delete ';
end case;
v_request := v_request || :EMPNO;
insert into EMPLOG (Request, UserName, RequestDate)
values (v_request, :APP_USER, sysdate);
end;
```
有时网格的内置数据库修改代码无法满足需求,此时可编写自定义 PL/SQL 代码进行替换。例如,当向不包含表所有字段的网格插入新行时,内置插入进程会为缺失字段分配空值,若需要非空默认值,可按以下步骤操作:
1. 在交互式网格页面创建新区域,命名为“CustomEmps”,类型设为“交互式网格”,模板设为“标准”,其数据源为:
```sql
select EmpNo, EName, Job, Sal, DeptNo
from EMP
```
2. 开启 EMPNO 列的主键属性,关闭其验证必填属性,然后在属性节点的编辑部分启用编辑。
3. 进入页面编辑器的“处理”选项卡,选择“Custom Emps - 保存交互式网格数据”进程节点。将“目标类型”属性值从默认的“区域源”改为“PL/SQL 代码”,在弹出的文本框中输入自定义代码。
自定义 PL/SQL 代码需处理插入、删除和更新三种操作,示例代码如下:
```sql
begin
case :APEX$ROW_STATUS
when 'C' then
insert into EMP(EName, Job, Sal, DeptNo,
Mgr, HireDate, Comm, Offsite)
values (:ENAME, :JOB, :SAL, :DEPTNO,
7839, sysdate, 0, 'N')
returning EmpNo into :EMPNO;
when 'U' then
update emp
set EName = :ENAME,
Job = :JOB,
Sal = :SAL,
DeptNo = :DEPTNO
where EmpNo = :EMPNO;
when 'D' then
delete emp
where EmpNo = :EMPNO;
end case;
end;
```
#### 2. 动态 SQL 概述
在很多情况下,可使用会话状态值自定义页面,但存在一定限制,如会话状态变量引用只能替换 SQL 查询中的常量,不能替换表名或列名。动态 SQL 技术可通过 PL/SQL 代码在运行时构造并执行 SQL 语句,从而克服这一限制。下面将介绍如何将动态 SQL 用作报表源或进程内容,并给出相关示例。
#### 3. 动态报表
以一个报表构建页面为例,用户可在顶部区域选择所需表、要显示的列并输入过滤条件,点击提交按钮后,底部区域将显示定制报表。
实现这两个区域的步骤如下:
- **指定报表区域**:
- 该区域包含三个项和一个按钮。“选择表”项名为“P43_TABLE”,是一个选择
0
0
复制全文
相关推荐










