海洋网络专业网站建设邯郸企业网站制作

张小明 2026/1/2 13:54:40
海洋网络专业网站建设,邯郸企业网站制作,北京网站建设的,重庆建筑工程信息管理平台背景 面向过程编程和面向对象编程#xff0c;是两种编程的思维方式。在数据库中编程#xff0c;大多都是用的存储过程#xff0c;但是Oracle也支持面向对象的编程方式#xff0c;即在自定义type中#xff0c;包含constructor function、member function的声明及定义。这种…背景面向过程编程和面向对象编程是两种编程的思维方式。在数据库中编程大多都是用的存储过程但是Oracle也支持面向对象的编程方式即在自定义type中包含constructor function、member function的声明及定义。这种方式能够较为轻松地使用其他面向对象编程的语言进行相互移植虽然语法上有所区别但是重要的是主体逻辑基本不用变,甚至oracle也提供了其他开发语言对这种type对象直接调用的支持。《ORACLE对象关系开发人员指南》所以实际上也存在很多在oracle中使用面向对象编程的代码。在openGauss3.0中是不支持这种功能的所以本文来讨论如何在openGauss3.0中进行改写以支持类似的功能。改写的例子例一CREATE OR REPLACE TYPE MESSAGE_RET_T AS OBJECT ( RET_CODE VARCHAR2 (6 CHAR), RET_MESSAGE VARCHAR2 (512 CHAR), CONSTRUCTOR FUNCTION MESSAGE_RET_T RETURN SELF AS RESULT ) / CREATE OR REPLACE TYPE BODY MESSAGE_RET_T AS CONSTRUCTOR FUNCTION MESSAGE_RET_T RETURN SELF AS RESULT IS BEGIN RETURN; END; END; / --使用指定参数位置 declare a MESSAGE_RET_T:MESSAGE_RET_T(RET_CODEa1,RET_MESSAGEb1); begin dbms_output.put_line(a.RET_CODE||-||a.RET_MESSAGE); end;在MESSAGE_RET_T这个type中有一个构建函数返回了自己也就是说通过这一段MESSAGE_RET_T(RET_CODE‘a1’,RET_MESSAGE‘b1’) 生成了一个对象对象的类型为MESSAGE_RET_T。如果在openGauss3.0中也要支持这样的功能那么MESSAGE_RET_T就只能是个函数因为openGauss中的type不能指定参数位置传参。这样就变成了既要有MESSAGE_RET_T这个函数也得有MESSAGE_RET_T这个TYPE很明显不行。而且如果一个type内的函数很多不同type间有重名函数这样必然会导致混乱和冲突。所以这个时候可以引入package的概念于是乎我尝试在openGauss中创建一个type并用这个type创建同名的packagepackage中必须包含一个self函数用于返回同名package对象比如CREATE TYPE MESSAGE_RET_T AS ( RET_CODE VARCHAR2 (6 ), -- 交易返回代码 RET_MESSAGE VARCHAR2 (512 ) -- 交易返回信息 ); create or REPLACE package MESSAGE_RET_T is function SELF(RET_CODE varchar2,RET_MESSAGE VARCHAR2) return MESSAGE_RET_T; end MESSAGE_RET_T; create or replace package body MESSAGE_RET_T is function SELF(RET_CODE varchar2,RET_MESSAGE VARCHAR2) return MESSAGE_RET_T is val MESSAGE_RET_T; begin val.RET_CODE:RET_CODE; val.RET_MESSAGE:RET_MESSAGE; return val; end; end MESSAGE_RET_T; --使用指定参数位置 declare a MESSAGE_RET_T:MESSAGE_RET_T.self(RET_CODEa1,RET_MESSAGEb1); begin dbms_output.put_line(a.RET_CODE||-||a.RET_MESSAGE); end;例二:如果type中存在返回self以外的其他函数那么改写时需要对其他函数都增加一个参数用于把self生成的对象传入比如,在oracle中CREATE OR REPLACE TYPE MESSAGE_LOCAL_HEADER_T AS OBJECT( RET MESSAGE_RET_A, -- 交易结果 CONSTRUCTOR FUNCTION MESSAGE_LOCAL_HEADER_T RETURN SELF AS RESULT, MEMBER FUNCTION getRet RETURN MESSAGE_RET_A ); CREATE OR REPLACE TYPE BODY MESSAGE_LOCAL_HEADER_T AS CONSTRUCTOR FUNCTION MESSAGE_LOCAL_HEADER_T RETURN SELF AS RESULT IS BEGIN RETURN; END; MEMBER FUNCTION getRet RETURN MESSAGE_RET_A IS BEGIN RETURN RET; END; END; / --使用 declare a MESSAGE_LOCAL_HEADER_T; b MESSAGE_RET_A: MESSAGE_RET_A(); c MESSAGE_RET_T; r1 MESSAGE_RET_A: MESSAGE_RET_A(); r2 varchar2(20); begin c : MESSAGE_RET_T(RET_CODE a1, RET_MESSAGE b1); b.extend; b(1) : c; a : MESSAGE_LOCAL_HEADER_T(ret b); r1 : a.getRet; r2:r1(1).RET_CODE; dbms_output.put_line(r2); end;改写后CREATE TYPE MESSAGE_LOCAL_HEADER_T AS ( RET MESSAGE_RET_A ); create or replace package MESSAGE_LOCAL_HEADER_T is function self(RET MESSAGE_RET_A ) return MESSAGE_LOCAL_HEADER_T; function getRet(self MESSAGE_LOCAL_HEADER_T) return MESSAGE_RET_A; end MESSAGE_LOCAL_HEADER_T; create or replace package body MESSAGE_LOCAL_HEADER_T is function self(RET MESSAGE_RET_A ) return MESSAGE_LOCAL_HEADER_T is val MESSAGE_LOCAL_HEADER_T; begin val:MESSAGE_LOCAL_HEADER_T(RET); return val; end; function getRet(self MESSAGE_LOCAL_HEADER_T) return MESSAGE_RET_A is begin return self.RET; end; end MESSAGE_LOCAL_HEADER_T; --使用 declare a MESSAGE_LOCAL_HEADER_T; b MESSAGE_RET_A; c MESSAGE_RET_T; r1 MESSAGE_RET_A; r2 varchar2(20); begin c : MESSAGE_RET_T.self(RET_CODE a1, RET_MESSAGE b1); b.extend; b(1) : c; a : MESSAGE_LOCAL_HEADER_T.self(ret b ); r1: MESSAGE_LOCAL_HEADER_T.getRet(a); r2: r1(1).RET_CODE; dbms_output.put_line(r2); end;其实这个改写的语法结构很像python中的class因为它函数的第一个参数也是self只是不需要再传自己进来。这种改写方式除了创建命令有所区别外调用方式也只有一点点区别例三:如果例一中不需要指定参数位置那么其实也不需要创建package比如,在oracle中CREATE TYPE MESSAGE_LOCAL_HEADER_T AS ( RET MESSAGE_RET_A ); create or replace package MESSAGE_LOCAL_HEADER_T is function self(RET MESSAGE_RET_A ) return MESSAGE_LOCAL_HEADER_T; function getRet(self MESSAGE_LOCAL_HEADER_T) return MESSAGE_RET_A; end MESSAGE_LOCAL_HEADER_T; create or replace package body MESSAGE_LOCAL_HEADER_T is function self(RET MESSAGE_RET_A ) return MESSAGE_LOCAL_HEADER_T is val MESSAGE_LOCAL_HEADER_T; begin val:MESSAGE_LOCAL_HEADER_T(RET); return val; end; function getRet(self MESSAGE_LOCAL_HEADER_T) return MESSAGE_RET_A is begin return self.RET; end; end MESSAGE_LOCAL_HEADER_T; --使用 declare a MESSAGE_LOCAL_HEADER_T; b MESSAGE_RET_A; c MESSAGE_RET_T; r1 MESSAGE_RET_A; r2 varchar2(20); begin c : MESSAGE_RET_T.self(RET_CODE a1, RET_MESSAGE b1); b.extend; b(1) : c; a : MESSAGE_LOCAL_HEADER_T.self(ret b ); r1: MESSAGE_LOCAL_HEADER_T.getRet(a); r2: r1(1).RET_CODE; dbms_output.put_line(r2); end;改写后CREATE TYPE MESSAGE_RET_T AS ( RET_CODE VARCHAR2 (6 ), RET_MESSAGE VARCHAR2 (512 ) ); --使用不指定参数位置 declare a MESSAGE_RET_T:MESSAGE_RET_T(a1,b1); begin dbms_output.put_line(a.RET_CODE||-||a.RET_MESSAGE); end;可以发现使用上是一模一样的。总结创建type和同名packagepackage中放一个self函数用来构造同名type对象从原有type中将其他函数都放在package中并且在函数的参数的第一个位置增加一个参数指定类型为改type使用时返回自己使用 包名.self 函数调用成员函数时改写成调用 包名.函数的方式并把原type对象作为第一个参数其他参数往后排理论上这可以算一个通用改写规则了硬生生用面向过程的处理方式实现了面向对象的改写但在编程思想上仍保留有面向对象的痕迹。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

一起做网店官方网站做营销网站那个好

Linux 系统优化与命令行操作指南 1. MySQL 优化建议 在处理 MySQL 数据库时,为了提升性能和效率,有一些实用的优化建议: - 字段声明 :创建表时,将字段声明为 NOT NULL ,这样可以节省空间并提高查询速度。 - 默认值设置 :为字段提供默认值,并在合适的地方使用…

张小明 2025/12/29 20:35:15 网站建设

门户网站建站流程wordpress列表自定义数据表

收藏和点赞,您的关注是我创作的动力 文章目录概要一、系统方案设计2.1系统整体架构设计2.2主控制器方案2.3显示方案设计2.4无线方案设计二、系统电路设计1 锁控制电路设计2 红外遥控接收电路3 系统电路4 系统仿真4.1.1仿真界面说明4.1.2密码输入仿真4.1.3开锁控制仿…

张小明 2025/12/29 9:11:38 网站建设

网站规划管理系统网站建设前端技术

App Volumes软件安装与配置指南 1. 系统要求与软件下载 在终端用户的虚拟桌面以及捕获和供应机器上使用的App Volumes Agent实例,需要Microsoft Windows 7或更高版本。满足所有先决条件和要求后,就可以下载App Volumes软件。 - 下载链接 :可以从以下链接下载软件: ht…

张小明 2025/12/28 6:52:09 网站建设

嘉兴企业网站推广方法线上推广的好处

16位MS-DOS编程中的文件I/O服务 1. 章节回顾问题 在16位MS - DOS编程中,有一系列关于INT 21h函数调用的问题值得探讨: 1. 调用INT 21h时,哪个寄存器保存函数号? 2. 哪个INT 21h函数用于终止程序? 3. 哪个INT 21h函数将单个字符写入标准输出? 4. 哪个INT 21h函数将以…

张小明 2026/1/1 17:03:30 网站建设

电子商务网站建设侧重哪几个方面saas系统怎么读

论文指导排名:7大平台专业团队推荐 论文指导排名:7大平台专业团队推荐 核心工具对比速览 工具名称 核心功能 处理速度 适配检测平台 特色亮点 aibiye AI生成人工改写 20分钟 知网/格子达/维普 AIGC率可降至个位数 aicheck 学术查重降重 实…

张小明 2026/1/1 14:50:23 网站建设