当前位置:  数据库>oracle

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

    来源: 互联网  发布时间:2017-04-30

    本文导语: 本文内容 演示用 Oracle 函数为表的某个字段进行字母数字组合编码 数据类型——字符数组 分割字符串 F_Comm_SplitStr 字母数字组合进位 F_Comm_NumLetterCarry 字母数字组合自增 F_Comm_IncreaseNumLetter 我们会遇到这样的情况:数据库...

本文内容
  • 演示用 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 v7
from dual;
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

下面实现这个功能。分为一个自定义数组和三个自定义函数:

  • 数据类型——字符数组
  • 分割字符串 F_Comm_SplitStr 用于分隔字母数字组合的字符串,并将其放到字符数组里。
  • 字母数字组合进位 F_Comm_NumLetterCarry 用于获得进位后的字符。
  • 字母数字组合自增 F_Comm_IncreaseNumLetter 用于字母数字组合字符串加一。

 

数据类型——字符数组
CREATE OR REPLACE TYPE char_table IS TABLE of VARCHAR2(1)
/
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } 分割字符串 F_Comm_SplitStr
create or replace function F_Comm_SplitStr(pi_str in varchar2)
  return char_table is
  v_char_table char_table;
  v_temp       varchar2(100);
  v_element    varchar2(100);
begin
  v_char_table := char_table();
  v_temp       := pi_str;
  while length(v_temp) > 0 loop
    v_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;
/

    
 
 

您可能感兴趣的文章:

  • ORACLE数据库常用字段数据类型介绍
  • oracle 实际值超过数据库某个字段指定长度报错解决
  • Oracle用什么语句查询字段?
  • 关于Oracle BLOB类型,一个String字符怎么写入BLOB字段?
  • 与Oracle连接时,怎样添加Bolb,Clob字段?急!!!!!
  • oracle删除表字段和oracle表增加字段
  • 请问保存文章内容的字段应用什么类型的(oracle),急!!!
  • 请问jboss+oracle文件怎样配置,数据库中文字段不为乱码
  • ****请教关于oracle中date型字段的显示问题。谢谢!!!**
  • Oracle 中文字段进行排序的sql语句
  • oracle中怎么没有boolean类型的字段?应该用什么代替?
  • 怎样将当前时间写到Oracle中date类型的字段中!!!!!!!!!!!!
  • 如何向oracle库中字段类型是date的添加数据
  • Oracle中大字段问题,数据大了就写不进去了。
  • Oracle 自增(auto increment) 或 标识字段的建立方法
  • jsp显示oracle中varchar2类型字段 在线等待
  • 在oracle数据库里创建自增ID字段的步骤
  • oracle关键字作为字段名使用方法
  • Oracle 查询表信息获取表字段及字段注释
  • jsp如何选择更新oracle的date字段
  • Oracle 实现类似SQL Server中自增字段的一个办法
  • Oracle 系统变量函数介绍
  • Oracle 系统变量函数用法指南
  • Oracle中decode函数的用法
  • Oracle round()函数与trunc()函数区别介绍
  • oracle中lpad函数的用法详解
  • MySQL实现类似Oracle中的decode()函数的功能
  • Oracle函数substr(str1, pos, [len])
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • SQL中Charindex和Oracle中对应的函数Instr对比
  • apache通过php的oci函数读取Oracle(字符集ZHS16GBK)时,显示乱码,如何解决?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • Oracle 12c的九大最新技术特性介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • ORACLE中DBMS_RANDOM随机数生成包
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,