Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 11g Release 1 (11.1) 函数为表的某个字段进行字母数字组合编码

本文内容

  • 演示用 Oracle 函数为表的某个字段进行字母数字组合编码
  • 数据类型——字符数组
  • 分割字符串 F_Comm_SplitStr
  • 字母数字组合进位 F_Comm_NumLetterCarry
  • 字母数字组合自增 F_Comm_IncreaseNumLetter
我们会遇到这样的情况:数据库的表,除了数字型的主键(ID)外,出于某种目的,有时,也需要为其他某个字段进行编码。比如,若编码规则有前缀,则建立视图后,根据编码,可以知道该条记录来自于“哪里(哪个业务流程)”。 也许,像 GUID 这样随机生成是个选择,但这种毫无规律的东西,在业务里很难使用。而且,实际中不确定是否能生成唯一的,虽然理论上不唯一的概率很小。本文演示编码规则:字母数字组合自增,也就是 0~9 和 A~Z。字母不区分大小写(你可以自己修改代码,让它区分大小写,这样编码更多)。至于多少位 VARCHAR2(...),酌情处理。至于何时溢出,字母数字组合,加上足够的位数,应该够了,再多,就分表吧。你也许会想,用编程语言一样能实现该功能,而且写起来还容易,那为什么还要用 Oracle 来写?这也许是对的。但若业务逻辑很复杂,同时,需要向数据库几张表写数据,并在每个表写多条记录时,要是这多条记录互相有关联性,就不那么容易了,特别是,SQL 的执行是事务型的,就更不容易控制了——要访问多少次数据库啊。把功能性的东西,用 Oracle 写好,函数也好,存储过程也好,再在应用程序创建 Oracle 匿名的过程,是个不错的选择。将复杂性分散开,Oracle 承担一部分,应用程序承担一部分。而应用程序主要承担业务本身和它们之间的逻辑。因此,软件开发是数据库,应用程序等,各个方面的问题,如果仅仅认为编程,就过于简单了。 

演示用 Oracle 函数为表的某个字段进行字母数字组合编码

若执行以下 SQL ,获得指定字母数字组合字符串加一的字符串,其中,F_Comm_IncreaseNumLetter(v_str in varchar2) 为自定义函数:select F_COMM_INCREASENUMLETTER("5") as v1,F_COMM_INCREASENUMLETTER("aA") as v2,F_COMM_INCREASENUMLETTER("01a") as v3,F_COMM_INCREASENUMLETTER("01aZ") as v4,F_COMM_INCREASENUMLETTER("0zzZzz") as v5,F_COMM_INCREASENUMLETTER("0000zZzzZ") as v6,F_COMM_INCREASENUMLETTER("0000zzZZabCDe") as v7from dual;
下面实现这个功能。分为一个自定义数组和三个自定义函数:
  • 数据类型——字符数组
  • 分割字符串 F_Comm_SplitStr 用于分隔字母数字组合的字符串,并将其放到字符数组里。
  • 字母数字组合进位 F_Comm_NumLetterCarry 用于获得进位后的字符。
  • 字母数字组合自增 F_Comm_IncreaseNumLetter 用于字母数字组合字符串加一。
 

数据类型——字符数组

CREATE OR REPLACE TYPE char_table IS TABLE of VARCHAR2(1)/

分割字符串 F_Comm_SplitStr

create or replace function F_Comm_SplitStr(pi_str in varchar2)return char_table isv_char_table char_table;v_temp varchar2(100);v_elementvarchar2(100);beginv_char_table := char_table();v_temp := pi_str;while length(v_temp) > 0 loopv_element := substr(v_temp, 1, 1);v_temp:= substr(v_temp, 2, length(v_temp));v_char_table.extend;v_char_table(v_char_table.count) := v_element;end loop;return v_char_table;end F_Comm_SplitStr;/
  • 1
  • 2
  • 下一页
Oracle 11g Release 1 (11.1) PL/SQL Collection 方法Oracle 11g Release 1 (11.1) PL/SQL_了解 Collections 和 Records 类型相关资讯      Oracle存储过程 
  • Oracle存储过程拼接in语句 & 自定  (今 09:21)
  • 【PL/SQL系列】Oracle存储过程使用  (04月23日)
  • Oracle存储过程及Java调用  (05/28/2015 20:29:33)
  • Java调用Oracle存储过程返回多条结  (04月29日)
  • Oracle中的存储过程简单应用  (04月10日)
  • 判断点是否落在面中的Oracle存储过  (05/09/2015 09:39:30)
本文评论 查看全部评论 (0)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民