Oracle 第27章:Oracle APEX开发

Oracle APEX 开发 - 第27章

APEX 平台介绍

Oracle Application Express (APEX) 是一个强大的工具,它允许开发者使用PL/SQL语言在Oracle数据库上快速构建功能丰富、可扩展的Web应用程序。APEX是完全基于浏览器的,这意味着开发者可以利用任何标准的Web浏览器来设计、测试和部署他们的应用程序。APEX的用户界面友好且直观,使得即使是初学者也能快速上手。

APEX的核心特性包括:
  • 无需安装客户端软件:所有操作都可以通过Web浏览器完成。
  • 内置安全性:提供多种安全措施以保护应用免受常见网络攻击。
  • 集成开发环境:提供了从页面设计到应用发布的完整工具链。
  • 丰富的组件库:包含各种UI组件,如表单、报告、图表等,简化了复杂应用的构建过程。
  • 移动支持:支持创建响应式设计的应用程序,适用于桌面和移动设备。
  • RESTful服务:能够轻松地将APEX应用与外部系统和服务集成。
  • 性能优化:提供了多种手段来提高应用的加载速度和响应时间。
应用程序构建与发布

构建一个Oracle APEX应用程序通常涉及以下几个步骤:

  1. 规划应用:确定应用的目标、功能需求以及目标用户群体。
  2. 设计界面:使用APEX提供的页面设计器来创建应用的用户界面。
  3. 实现逻辑:编写PL/SQL代码来处理业务逻辑。
  4. 测试应用:通过单元测试和集成测试确保应用按预期工作。
  5. 部署应用:将应用部署到生产环境中,并进行监控和维护。
示例:构建一个简单的员工信息管理系统

假设我们要构建一个简单的员工信息管理系统,该系统允许管理员添加、编辑和删除员工记录,同时提供搜索功能。

步骤1: 创建应用
  1. 登录到Oracle APEX管理控制台。
  2. 选择“创建应用”。
  3. 输入应用名称(例如:“员工信息管理”)和其他基本信息。
  4. 完成向导并创建应用。
步骤2: 设计页面
  1. 在“页面”部分,创建一个新的页面,例如页面10(列表页)和页面20(编辑页)。
  2. 对于页面10,添加一个交互式报告组件来显示员工列表。
  3. 对于页面20,添加一个表单页面来编辑或添加新的员工记录。
步骤3: 编写PL/SQL逻辑
  1. 在页面10的属性中,设置报告查询以从数据库中检索数据。
    SELECT employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary
    FROM employees
    
  2. 在页面20中,配置表单以连接到employees表,并定义插入、更新和删除操作的PL/SQL过程。
步骤4: 测试应用
  1. 使用不同的用户权限测试应用的功能,确保所有功能正常运行。
  2. 检查数据的一致性和完整性。
步骤5: 发布应用
  1. 在应用的“共享组件”下,配置安全性设置,如身份验证方案和授权方案。
  2. 将应用发布到生产环境,确保所有依赖项都已正确配置。

通过以上步骤,您可以成功构建并发布一个基本的员工信息管理系统。Oracle APEX的强大之处在于其灵活性和易用性,即使对于非专业的开发人员来说,也能够快速上手并构建出高效的应用程序。

当然,我们可以进一步深入探讨每个步骤的具体细节,并提供更多的示例代码和最佳实践。

继续追加:构建和发布Oracle APEX应用程序

详细步骤和示例代码
步骤1: 规划应用

在开始之前,明确应用的需求和目标是非常重要的。对于员工信息管理系统,我们需要考虑以下几点:

  • 功能需求

    • 显示员工列表
    • 添加新员工
    • 编辑现有员工信息
    • 删除员工
    • 搜索员工
  • 数据模型

    • 员工表 (employees) 包含字段:employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary
  • 用户角色

    • 管理员:可以执行所有操作
    • 普通用户:只能查看员工列表
步骤2: 设计界面
  1. 登录到Oracle APEX

    • 打开浏览器,访问你的Oracle APEX实例。
    • 使用管理员账号登录。
  2. 创建应用

    • 选择“创建应用”。
    • 输入应用名称(例如:“员工信息管理”)。
    • 选择合适的主题和导航菜单样式。
    • 完成向导并创建应用。
  3. 创建页面

    • 页面10(员工列表)
      • 选择“创建页面” -> “交互式报告”。
      • 选择数据源为employees表。
      • 配置列和过滤器。
    • 页面20(编辑员工)
      • 选择“创建页面” -> “表单”。
      • 选择表为employees
      • 配置表单字段和按钮。
步骤3: 实现逻辑
  1. 配置交互式报告

    • 在页面10的属性中,设置报告查询:
      SELECT employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary
      FROM employees
      
  2. 配置表单页面

    • 在页面20的属性中,配置表单以连接到employees表。
    • 设置插入、更新和删除操作的PL/SQL过程:
      • 插入操作
        BEGININSERT INTO employees (first_name, last_name, email, phone_number, hire_date, job_id, salary)VALUES (:P20_FIRST_NAME, :P20_LAST_NAME, :P20_EMAIL, :P20_PHONE_NUMBER, :P20_HIRE_DATE, :P20_JOB_ID, :P20_SALARY);
        END;
        
      • 更新操作
        BEGINUPDATE employeesSET first_name = :P20_FIRST_NAME,last_name = :P20_LAST_NAME,email = :P20_EMAIL,phone_number = :P20_PHONE_NUMBER,hire_date = :P20_HIRE_DATE,job_id = :P20_JOB_ID,salary = :P20_SALARYWHERE employee_id = :P20_EMPLOYEE_ID;
        END;
        
      • 删除操作
        BEGINDELETE FROM employeesWHERE employee_id = :P20_EMPLOYEE_ID;
        END;
        
  3. 添加搜索功能

    • 在页面10上添加一个搜索框。
    • 配置动态动作,当用户输入搜索条件时,刷新报告:
      DECLAREl_search VARCHAR2(100) := :P10_SEARCH;
      BEGINIF l_search IS NOT NULL THENRETURN 'UPPER(first_name) LIKE UPPER(:P10_SEARCH) ESCAPE ''\'' OR UPPER(last_name) LIKE UPPER(:P10_SEARCH) ESCAPE ''\''';ELSERETURN NULL;END IF;
      END;
      
步骤4: 测试应用
  1. 单元测试

    • 确保每个页面和功能都能正常工作。
    • 检查数据的一致性和完整性。
  2. 集成测试

    • 测试不同用户角色的权限。
    • 模拟多用户并发操作,确保系统的稳定性和性能。
步骤5: 发布应用
  1. 配置安全性

    • 在“共享组件”中,配置身份验证方案和授权方案。
    • 例如,使用“数据库账户”身份验证方案,确保只有经过认证的用户才能访问应用。
  2. 部署应用

    • 将应用发布到生产环境。
    • 确保所有依赖项(如数据库连接、静态文件等)都已正确配置。
    • 监控应用的性能和用户反馈,及时进行调整和优化。

最佳实践

  • 性能优化

    • 使用索引优化查询性能。
    • 避免在页面上加载大量数据,使用分页或无限滚动。
    • 缓存静态资源,减少服务器负载。
  • 安全性

    • 使用参数化查询防止SQL注入。
    • 对敏感数据进行加密存储。
    • 定期备份数据库,防止数据丢失。
  • 用户体验

    • 提供清晰的错误提示和帮助文档。
    • 使用响应式设计,确保应用在不同设备上都能良好运行。
    • 优化页面加载时间,提高用户满意度。

通过以上详细的步骤和示例代码,您应该能够成功构建和发布一个功能完善的员工信息管理系统。Oracle APEX的强大功能和灵活性使其成为企业级应用开发的理想选择。

当然,我们可以进一步深入探讨一些高级特性和最佳实践,以提升应用的性能、安全性和用户体验。

进一步深入:高级特性和最佳实践

1. 动态操作和动态内容

动态操作和动态内容可以使您的应用更加灵活和响应用户交互。以下是一些示例:

动态操作示例
  1. 自动填充表单字段

    • 当用户选择某个员工时,自动填充表单中的其他字段。
    • 在页面20上,添加一个动态动作,当P20_EMPLOYEE_ID字段发生变化时,执行PL/SQL代码:
      BEGINSELECT first_name, last_name, email, phone_number, hire_date, job_id, salaryINTO :P20_FIRST_NAME, :P20_LAST_NAME, :P20_EMAIL, :P20_PHONE_NUMBER, :P20_HIRE_DATE, :P20_JOB_ID, :P20_SALARYFROM employeesWHERE employee_id = :P20_EMPLOYEE_ID;
      EXCEPTIONWHEN NO_DATA_FOUND THEN-- 处理未找到数据的情况NULL;
      END;
      
  2. 动态过滤报告

    • 在页面10上,添加一个搜索框,并配置动态动作,当用户输入搜索条件时,刷新报告:
      • 创建一个动态动作,类型为“更改”,事件为“P10_SEARCH”。
      • 添加一个真动作,类型为“提交页面”。
动态内容示例
  1. 动态区域

    • 根据用户的权限动态显示或隐藏某些区域。
    • 在页面属性中,为区域设置条件显示,例如:
      RETURN :APP_USER = 'ADMIN';
      
  2. 动态图表

    • 根据用户选择的数据动态生成图表。
    • 在页面上添加一个图表组件,并配置数据源为一个动态查询。
2. RESTful 服务集成

Oracle APEX 支持通过 RESTful 服务与其他系统集成。以下是一个示例,展示如何从外部 API 获取数据并显示在 APEX 应用中。

  1. 创建 REST 数据源

    • 导航到“共享组件” -> “REST 数据源”。
    • 创建一个新的 REST 数据源,配置 URL 和请求方法(GET)。
    • 例如,获取天气数据:
      https://api.openweathermap.org/data/2.5/weather?q={city}&appid={your_api_key}
      
  2. 在页面上使用 REST 数据

    • 在页面上添加一个动态内容区域,使用 JavaScript 调用 REST API 并显示结果。
    • 例如,在页面10上添加一个动态内容区域:
      <div id="weather"></div>
      <script>apex.server.process("GET_WEATHER",{x01: "London", // 城市名称x02: "your_api_key" // API 密钥},{success: function(pData) {document.getElementById("weather").innerHTML = "Temperature: " + pData.main.temp + "°C";}});
      </script>
      
  3. 创建服务器端进程

    • 在“共享组件” -> “服务器端进程”中创建一个新的进程,命名为“GET_WEATHER”。
    • 编写 PL/SQL 代码调用 REST API 并返回结果:
      DECLAREl_url VARCHAR2(4000);l_http_request UTL_HTTP.req;l_http_response UTL_HTTP.resp;l_response_text CLOB;
      BEGINl_url := 'https://api.openweathermap.org/data/2.5/weather?q=' || :x01 || '&appid=' || :x02;l_http_request := UTL_HTTP.begin_request(l_url, 'GET', 'HTTP/1.1');l_http_response := UTL_HTTP.get_response(l_http_request);DBMS_LOB.createtemporary(l_response_text, TRUE);UTL_HTTP.read_text(l_http_response, l_response_text, 32767);UTL_HTTP.end_response(l_http_response);apex_json.parse(l_response_text);apex_json.open_object;apex_json.write('main', apex_json.get_clob('main'));apex_json.close_object;
      END;
      
3. 性能优化
  1. 索引优化

    • 为经常用于查询的字段创建索引,以提高查询性能。
    • 例如,为employees表的first_namelast_name字段创建索引:
      CREATE INDEX idx_employees_name ON employees (first_name, last_name);
      
  2. 分页和无限滚动

    • 使用分页或无限滚动技术,避免一次性加载大量数据。
    • 在交互式报告中启用分页或无限滚动选项。
  3. 缓存

    • 使用 APEX 的缓存机制,减少对数据库的频繁访问。
    • 例如,为静态数据启用缓存:
      apex_collection.create_or_truncate_collection(p_collection_name => 'STATIC_DATA');
      
4. 安全性增强
  1. 输入验证

    • 在表单字段上启用输入验证,防止非法输入。
    • 例如,为email字段添加验证:
      BEGINIF NOT REGEXP_LIKE(:P20_EMAIL, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$') THENRETURN FALSE;END IF;RETURN TRUE;
      END;
      
  2. SQL 注入防护

    • 使用绑定变量,防止 SQL 注入。
    • 例如,在 PL/SQL 代码中使用绑定变量:
      BEGINEXECUTE IMMEDIATE 'INSERT INTO employees (first_name, last_name, email) VALUES (:1, :2, :3)'USING :P20_FIRST_NAME, :P20_LAST_NAME, :P20_EMAIL;
      END;
      
  3. 权限管理

    • 使用 APEX 的权限管理功能,限制不同用户的角色和权限。
    • 例如,创建一个授权方案,仅允许管理员访问某些页面:
      RETURN :APP_USER IN ('ADMIN', 'SUPERUSER');
      
5. 用户体验优化
  1. 响应式设计

    • 使用 APEX 的响应式主题,确保应用在不同设备上都能良好运行。
    • 例如,选择一个响应式主题,并在页面属性中启用响应式布局。
  2. 用户反馈

    • 提供清晰的错误提示和帮助文档,帮助用户理解如何使用应用。
    • 例如,在表单字段上添加帮助文本:
      <p class="u-VisuallyHidden">请输入有效的电子邮件地址。</p>
      
  3. 性能监控

    • 使用 APEX 的性能监控工具,定期检查应用的性能和用户反馈。
    • 例如,启用 APEX 的性能分析器:
      APEX_INSTANCE_ADMIN.SET_PARAMETER(p_parameter => 'ENABLE_PERFORMANCE_ANALYZER',p_value => 'YES'
      );
      

通过以上高级特性和最佳实践,您可以进一步提升 Oracle APEX 应用的性能、安全性和用户体验。希望这些内容对您有所帮助!如果您有任何具体的问题或需要进一步的帮助,请随时告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/466371.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习经典模型之Network in Network

1 Network in Network 1.1 模型介绍 ​ Network In Network (NIN)是由 M i n L i n Min Lin MinLin等人提出&#xff0c;在CIFAR-10和CIFAR-100分类任务中达到当时的最好水平&#xff0c;因其网络结构是由三个多层感知机堆叠而被成为NIN [ 5 ] ^{[5]} [5]。NIN以一种全新的角…

Java版ERP管理系统源码解析:利用Spring Cloud Alibaba和Spring Boot实现微服务架构

ERP系统&#xff0c;亦称为企业资源计划系统&#xff0c;是一种融合了企业多元部门和复杂业务的综合管理信息系统。在全球经济蓬勃发展及企业竞争日趋激烈的背景下&#xff0c;ERP系统已逐步跃升为现代企业管理的核心工具。该系统通过优化资源配置及提升业务流程效率&#xff0…

Python 基础笔记之生成器generator

生成斐波拉契数列 def fib(length):a,b0,1n0while n<length:yield aa,bb,abn1return abc g2fib(10) try:print(next(g2)) 生成器方法&#xff1a; __next__():获取下一个元素 send(value):向每次生成器调用中传值 注意&#xff1a;第一次调用send(None) def gen():i0while…

vscode翻译插件

vscode翻译插件 需求 &#xff1a; 在编写代码的时候&#xff0c; 打印或者定义变量的时候总是想不起来英文名称&#xff0c; 所有就开发了一款中文转换为英文的插件。 功能 1、目前支持选中中文&#xff0c;右键选择打印或者变量进行转换。 2、目前支持选中中文&#xff0…

美格智能5G车规级通信模组:高精度定位守护极致安全

物联网时代&#xff0c;众多应用和设备都需要位置相关服务&#xff0c;尤其是对移动场景而言&#xff0c;定位的需求更加重要。随着自动驾驶、高阶辅助驾驶等智能车载技术的高速发展&#xff0c;在智能车载领域的定位需求除基础的位置信息之外&#xff0c;还对信息获取的速度、…

SpringMVC学习记录(三)之响应数据

SpringMVC学习记录&#xff08;三&#xff09;之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…

药品进销存表格制作 佳易王药店药品入库出库台账库存管理系统操作教程

一、概述 【软件试用版资源文件下载可以点文章最后官网卡片】 药品进销存表格制作 药店药品入库出库台账库存管理系统操作教程 ‌核心功能全面‌&#xff1a;涵盖药品进货、销售、库存管理&#xff0c;以及数据分析与报表生成。 ‌药品进货管理‌&#xff1a;记录供应商信息和…

网页版五子棋——用户模块(服务器开发)

前一篇文章&#xff1a;网页版五子棋—— WebSocket 协议-CSDN博客 目录 前言 一、编写数据库代码 1.数据库设计 2.配置 MyBatis 3.创建实体类 4.创建 UserMapper 二、前后端交互接口 1.登录接口 2.注册接口 3.获取用户信息 三、服务器开发 1.代码编写 2.测试后端…

A day a tweet(seventeen)——Visualize Convolution Neural Network!

a.形象化地CNNs visually explained! . .CNN(Convolution Neural Network) 卷积神经网络 a.不可思议的,难以置信的 v.使形象化CNN explainer is an incredible interactive tool to visualize the internal workings of a CNN. n.解释器;讲解员 …

将vscode的终端改为cygwin terminal

现在终端是默认的power shell&#xff0c;没有显示cygwin 接下来选择默认配置文件 找到cygwin的选项即可 然后提示可能不安全什么的&#xff0c;点是&#xff0c;就有了

大语言模型训练的全过程:预训练、微调、RLHF

一、 大语言模型的训练过程 预训练阶段&#xff1a;PT&#xff08;Pre training&#xff09;。使用公开数据经过预训练得到预训练模型&#xff0c;预训练模型具备语言的初步理解&#xff1b;训练周期比较长&#xff1b;微调阶段1&#xff1a;SFT&#xff08;指令微调/有监督微调…

《AI在企业战略中的关键地位:以微软和阿里为例》

内容概要 在当今商业环境中&#xff0c;人工智能&#xff08;AI&#xff09;的影响力如滔滔洪水&#xff0c;愈演愈烈。文章将揭示AI在企业战略中的崛起&#xff0c;尤其以微软和阿里巴巴为代表的企业&#xff0c;这两家科技巨头通过不同方式&#xff0c;将智能技术融入其核心…

aspose如何获取PPT放映页“切换”的“持续时间”值

文章目录 项目场景问题描述问题1&#xff1a;从官方文档和资料查阅发现并没有对切换的持续时间进行处理的方法问题2&#xff1a;aspose的依赖包中&#xff0c;所有的关键对象都进行了混淆处理 解决方案1、找到ppt切换的持续时间对应的混淆对象中的字段2、获取ppt切换的持续时间…

Linux挖矿病毒(kswapd0进程使cpu爆满)

一、摘要 事情起因:有台测试服务器很久没用了&#xff0c;突然监控到CPU飙到了95以上&#xff0c;并且阿里云服务器厂商还发送了通知消息&#xff0c;【阿里云】尊敬的xxh: 经检测您的阿里云服务&#xff08;ECS实例&#xff09;i-xxx存在挖矿活动。因此很明确服务器中挖矿病毒…

线性代数:Matrix2x2和Matrix3x3

今天整理自己的框架代码&#xff0c;将Matrix2x2和Matrix3x3给扩展了一下&#xff0c;发现网上unity数学计算相关挺少的&#xff0c;所以记录一下。 首先扩展Matrix2x2&#xff1a; using System.Collections; using System.Collections.Generic; using Unity.Mathemati…

CLIP论文CLIP 改进工作串讲

文章目录 CLIPViLTCLIP 改进工作串讲Lseg&#xff08;Language -driven semantic segmentation)Group ViT&#xff08;Semantic Segmentation Emerges from Text Supervision&#xff09;ViLDGLIP_V1/V2&#xff08;Ground Language-Image Pre-train&#xff09;CLIP PassoCLIP…

C++builder中的人工智能(9)如何在C++中创建AI二进制/Heaviside步进函数

什么是二进制步进函数&#xff1f;我们应该使用二进制步进函数还是Heaviside步进函数&#xff1f;二进制步进函数和Heaviside步进函数是同一回事吗&#xff1f;什么是单位步进函数&#xff1f;通过学习如何在C中创建AI二进制/Heaviside步进函数&#xff0c;它将帮助你使用C IDE…

数据结构-数组(稀疏矩阵转置)和广义表

目录 1、数组定义 1&#xff09;数组存储地址计算示例①行优先②列优先 2&#xff09;稀疏矩阵的转置三元组顺序表结构定义 ①普通矩阵转置②三元组顺序表转置稀疏矩阵③稀疏矩阵的快速转置 3&#xff09;十字链表结构定义 2、广义表定义 1&#xff09;基本操作①GetHead②GetT…

云集电商:如何通过 OceanBase 实现降本 87.5%|OceanBase案例

云集电商&#xff0c;一家聚焦于社交电商的电商公司&#xff0c;专注于‘精选’理念&#xff0c;致力于为会员提供超高性价比的全品类精选商品&#xff0c;以“批发价”让亿万消费者买到质量可靠的商品。面对近年来外部环境的变化&#xff0c;公司对成本控制提出了更高要求&…

【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;WebStorm 目录 问题概述 原因 解决方案 解决方法 潜在问题修改 最终效果呈现 额外内容 管理员界面路由配置 WebStorm背景更换 法一&#xff1a; 法二&#xff1a; 问题概…