oracle更改编码规则,Oracle自定义编码规则
Oracle自定义编码规则的实现
在编写程序的过程中,我们经常会用到对一些记录进行编码的实现,有时候定义的编码规则并不能很好的实现需求,比如使用lpad(rpad)函数进行补充的时候,有个长度的限制,这时候就影响了编码的正常使用。
在下面提供了一个公用的扩展性比较好的编码规则
1、创建编码的客户化表
-- Create table
create table CUX.CUX_DOC_SEQUENCES
(
doc_type VARCHAR2 (30 ),
pk1_value VARCHAR2 (50 ),
pk2_value VARCHAR2 (50 ),
pk3_value VARCHAR2 (50 ),
pk4_value VARCHAR2 (50 ),
pk5_value VARCHAR2 (50 ),
next_seq_number NUMBER ,
created_by NUMBER ,
creation_date DATE ,
last_updated_by NUMBER ,
last_update_date DATE ,
last_update_login NUMBER
)
tablespace APPS_TS_TX_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 128 K
next 128 K
minextents 1
maxextents unlimited
pctincrease 0
);
-- Create/Recreate indexes
create unique index CUX.CUX_DOC_SEQUENCES_U1 on CUX.CUX_DOC_SEQUENCES (DOC_TYPE, PK1_VALUE, PK2_VALUE, PK3_VALUE, PK4_VALUE, PK5_VALUE)
tablespace APPS_TS_TX_IDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 128 K
next 128 K
minextents 1
maxextents unlimited
pctincrease 0
);
2、定义生成编码的function
FUNCTION next_seq_number(p_doc_type IN VARCHAR2 ,
p_pk1_value IN VARCHAR2 DEFAULT NULL ,
p_pk2_value IN VARCHAR2 DEFAULT NULL ,
p_pk3_value IN VARCHAR2 DEFAULT NULL ,
p_pk4_value IN VARCHAR2 DEFAULT NULL ,
p_pk5_value IN VARCHAR2 DEFAULT NULL ,
p_init_number IN NUMBER DEFAULT 1 ) RETURN NUMBER IS
PRAGMA AUTONOMOUS_TRANSACTION ;
CURSOR c_seq IS
SELECT ds.rowid row_id, ds.next_seq_number
FROM cux_doc_sequences ds
WHERE ds.doc_type = p_doc_type
AND ds.pk1_value = nvl(p_pk1_value, '-1' )
AND ds.pk2_value = nvl(p_pk2_value, '-1' )
AND ds.pk3_value = nvl(p_pk3_value, '-1' )
AND ds.pk4_value = nvl(p_pk4_value, '-1' )
AND ds.pk5_value = nvl(p_pk5_value, '-1' )
FOR UPDATE NOWAIT;
l_row_id VARCHAR2 (18 );
l_next_seq_number NUMBER ;
BEGIN
OPEN c_seq;
FETCH c_seq
INTO l_row_id, l_next_seq_number;
IF c_seq%NOTFOUND THEN
l_next_seq_number := nvl(p_init_number, 1 );
INSERT INTO cux_doc_sequences
(doc_type,
pk1_value,
pk2_value,
pk3_value,
pk4_value,
pk5_value,
next_seq_number,
creation_date,
created_by,
last_update_date,
last_updated_by,
last_update_login)
VALUES
(p_doc_type,
nvl(p_pk1_value, '-1' ),
nvl(p_pk2_value, '-1' ),
nvl(p_pk3_value, '-1' ),
nvl(p_pk4_value, '-1' ),
nvl(p_pk5_value, '-1' ),
l_next_seq_number,
SYSDATE ,
fnd_global.user_id,
SYSDATE ,
fnd_global.user_id,
fnd_global.login_id);
ELSE
l_next_seq_number := l_next_seq_number + 1 ;
UPDATE cux_doc_sequences
SET next_seq_number = l_next_seq_number,
last_update_date = SYSDATE ,
last_updated_by = fnd_global.user_id,
last_update_login = fnd_global.login_id
WHERE ROWID = l_row_id;
END IF ;
CLOSE c_seq;
COMMIT ;
RETURN l_next_seq_number;
END next_seq_number;
FUNCTION next_seq_number(p_doc_type IN VARCHAR2 ,
p_doc_prefix IN VARCHAR2 ,
p_seq_length IN NUMBER DEFAULT 0 ,
p_pk1_value IN VARCHAR2 DEFAULT NULL ,
p_pk2_value IN VARCHAR2 DEFAULT NULL ,
p_pk3_value IN VARCHAR2 DEFAULT NULL ,
p_pk4_value IN VARCHAR2 DEFAULT NULL ,
p_pk5_value IN VARCHAR2 DEFAULT NULL ,
p_init_number IN NUMBER DEFAULT 1 ) RETURN VARCHAR2 IS
l_next_seq_number NUMBER ;
l_doc_number VARCHAR2 (150 );
BEGIN
l_next_seq_number := next_seq_number(p_doc_type => p_doc_type,
p_pk1_value => p_pk1_value,
p_pk2_value => p_pk2_value,
p_pk3_value => p_pk3_value,
p_pk4_value => p_pk4_value,
p_pk5_value => p_pk5_value,
p_init_number => p_init_number);
IF p_seq_length IS NULL OR p_seq_length = 0 THEN
l_doc_number := p_doc_prefix || l_next_seq_number;
ELSE
IF length(l_next_seq_number) >= p_seq_length THEN
l_doc_number := p_doc_prefix || l_next_seq_number;
ELSE
l_doc_number := p_doc_prefix ||
lpad(l_next_seq_number, p_seq_length, '0' );
END IF ;
END IF ;
RETURN l_doc_number;
END next_seq_number;
3、调用function生成编码
例子:
FUNCTION get_receipt_number(p_org_id IN NUMBER, p_receipt_date DATE )
RETURN VARCHAR2 IS
l_receipt_number VARCHAR2 (30 );
BEGIN
l_receipt_number := cux_doc_sequence_utl.next_seq_number(p_doc_type => 'POS_AR_RECEIPT_NUMBER' ,
p_doc_prefix => 'POS_' ||
to_char(p_receipt_date,
'YYYYMM' ),
p_seq_length => 5 ,
p_pk1_value => p_org_id,
p_pk2_value => to_char(p_receipt_date,
'YYYYMM' ));
RETURN l_receipt_number;
EXCEPTION
WHEN no_data_found THEN
RETURN NULL ;
cux_conc_utl.log_msg( 'FUNCTION get_receipt_number ERROR:' ||
'NO_DATA_FOUND' );
--RAISE fnd_api.g_exc_error;
WHEN too_many_rows THEN
RETURN NULL ;
cux_conc_utl.log_msg( 'FUNCTION get_receipt_number ERROR:' ||
'TOO_MANY_ROWS' );
--RAISE fnd_api.g_exc_error;
WHEN OTHERS THEN
RETURN NULL ;
cux_conc_utl.log_msg( 'FUNCTION get_receipt_number ERROR:' || SQLERRM );
--RAISE fnd_api.g_exc_error;
END get_receipt_number;
oracle更改编码规则,Oracle自定义编码规则相关推荐
- oracle更改密码机制,Oracle密码机制以及常用操作
Oracle 默认有3个用户: sys 密码:自定:system 密码:自定 :scott 密码:Tiger(默认锁定):注:用Sys用户登录须根 [as sysdba Oracle 默认有3个用户: ...
- oracle 更改启动内存,Oracle 11gR2修改内存参数后无法启动问题
Microsoft Windows [版本 6.1.7600] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\windows\system32>n ...
- oracle更改分区表结构,Oracle分区修改的语句
Oracle分区修改的语句 1.增加一个分区 ALTER TABLE sales ADD PARTITION jan96 VALUES LESS THAN ( '01-FEB-1999' ) TABL ...
- ORACLE HANDBOOK系列之十:字符集、编码以及Oracle的那些事
第一部分字符集与编码常识 字符集: 人们根据需要把某些字符收集到一处,并赋以名称,于是便有了某某字符集. 编码: 当前面收集的工作完成以后,为了让只认识数字的"愚蠢"的计算机也能够 ...
- oracle ebs应用产品安全性-交叉验证规则
定义: Oracle键弹性域可以根据自定义键弹性域时所定义的规则,执行段值组合的自动交叉验证.使用交叉验证来严密控制新的键弹性域组合的创建过程:Oracle应用产品提供了多个键弹性域的交叉验证机制,如 ...
- FatFs 之二 路径规则、字符编码、编码页、卷管理详解
写在前面 本文的内容部分来自于 FatFs 的官方文档,但是添加了一些额外的章节及内容.其并不是原版 FatFs 的官方文档的翻译.如果关注与 FatFs 的官方文档,请从本文的 参考 章节前去查看即 ...
- oracle数据库字符6,oracle 数据库字符编码
理解ORACLE 字符集[转] 一.引言 ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处 ...
- oracle查看编码格式以及修改字符集编码
oracle查看编码格式以及修改字符集编码 查看oracle数据库的编码集 客户端字符集环境select * from nls_instance_parameter,其来源于v$p ...
- PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的。 检查Oracle服务器端字符编码,用 sel
PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的. 检查Oracle服务器端字符编码,用 select ...
最新文章
- 过采样为什么能提高信噪比
- GitHub Copilot 支持 IntelliJ IDEA啦,插件装起来!
- python整理excel数据-利用python整理需要的excel报表(上)
- Linux 下搭建 Scala 开发环境
- VTK:可视化之ProjectSphere
- Supporting Multiple Screens 翻译 支持各种屏幕(上)
- sync.Once 的前世今生
- 误删50节点K8s集群为何3小时才能复原?Spotify揭自家事故幕后经验
- S9300 STP 配置规范
- 一段获取视频的简易方法
- centos 6.8 配置csh的shell和环境变量
- 基于Node.js实现一个小小的爬虫
- ​​​​尚硅谷—尚医通—前台用户系统—预约挂号—预约下单功能实现(155-160)
- MYSQL数据库导出和备份----mysqldump
- 仓库温度湿度控制措施_仓库温度湿度控制管理制度
- 计算机中的PS颜色填充快捷键,ps颜色填充快捷键【设置办法】
- C++:66---特殊工具与技术之(不可移植的特性:位域、volatile、extern “C“链接提示)
- 【压缩感知合集3】压缩感知的背景与意义
- java项目-第61期基于ssm项目在线心理测评系统
- 关于xml加载提示: Error on line 1 of document : 前言中不允许有内容
热门文章
- 单片机第一个程序----点亮LED灯
- 【C语言】语言篇——程序设计入门
- ubuntu18.04上安装anaconda-python深度学习环境
- 数据科学指南#基础篇 Matplotlib 入门
- Python 用pandas处理csv,dataframe,groupby等
- 小红书app滑块解决思路
- C#如何添加PDF水印
- mysql入学时间_2016年小学生开学时间-2016全国小学开学时间一览表最新权威版-东坡下载...
- pytorch——计算两个等大无序点云中的距离Earth Mover Distance
- python依托Excel批量实现调查问卷数据的图表可视化