
单据序列的概念及应用
(9-Dec-96)
目录
文档控制 ii
概述 4
单据序列概念 4
单据序列(客户化应用 ) 7
AR 中的 单据序列 11
AR 中的 单据序列 试验 14
单据序列 的实用意义分析 23
已解决问题和未解决问题 27
未解决问题 27
已解决问题 27
(9-Dec-96)
概述
本文对 Oracle ERP系统 中 “单据序列”的概念进行了初步的探索和实验。目的在于进一步理解“单据序列”的概念和作用
单据序列概念
序列的概念
Oracle 对于序列概念的描述如下:
单据序列可对 Oracle Applications 产品所生成的单据进行唯一编号。利用 Oracle Applications,您可以通过在表单中输入数据并生成单据(如),起动一项事务处理。单据序列会生成跟踪线索,用以标识创建了该事务处理的应用产品(如 Oracle Receivables),以及所生成的原始单据(如编号 1234)。
单据序列可以提供完整性的证明。例如,单据序列可用于反映每项事务处理,甚至是失败的事务处理。
单据序列还可以提供跟踪线索。例如,单据序列可以提供一条从总帐到子分类帐,再到最初影响帐户余额的单据的跟踪线索。
由于单据序列会生成跟踪数据,因此即使单据被删除,它们的跟踪记录也会保留下来。
序列的定义
Nav : System Administrator->Application->Document->Define
上图我们看到的是一个序列:AP号,可以看出来该序列采用自动编号。初始值为1 ,其内部的Doc_sequence_id = 5
oracle 对每一个序列的使用都有跟踪记录,并且序列的跟踪记录存储在应用产品的跟踪表中,其标题为 Application Short Name _DOC_SEQUENCE_AUDIT。例如,属于 Oracle Payables 的序列的跟踪表为 AP_DOC_SEQUENCE_AUDIT。
在这张表中,我们检索AP所有使用过的编号,这些编号被使用在哪种单据类型上。如下图所示
上图中,DOC_SEQUENCE_ID是单据序列的内部ID , 5表示AP ;而DOC_SEQUENCE_ASSIGNMENT_ID是单据分配的内部ID,它表示该单据序列被分配在哪种单据类别上(下文会有描述);而DOC_SEQUENCE_VALUE表示该单据序列被分配在某种单据类别上,曾经在什么时候被使用过,其值是多少。
序列的分配
Nav : System Administrator->Application->Document->Define
上图中,我们看到单据序列:AP号被分配给单据类别:借项通知单。其DOC_SEQUENCE_ASSIGNMENT_ID=8 。
单据类别的定义
Nav : System Administrator->Application->Document->Category
单据类别标识了存储单据(由用户输入的事务处理产生)的数据库表。
使用类别可对单据进行更精确地分类。例如,您可以将应收帐款分成以下几个不同的类别:
拖欠款项
定金
保证金
借项通知单
贷项通知单
销售
客户服务
同样,您也可以将应付帐款或采购分成以下几个不同的类别:
标准
费用报表
预付款
利息
贷项通知单
借项通知单
单据序列(客户化应用 )
我们知道,定义单据类别的时候只是指定了表的名字,而在定义单据序列,以及把单据序列分配给单据类别的时候也没有指定任何子段,那么oracle 是如何利用单据序列来给特定的字段自动生成编号的呢?
我们来看个客户化程序中使用单据序列的实验例子。
客户化的程序中如何使用单据序列?
1、在 HWCUST Schema 中 创建一个测试表
create table cux_seq_test
(test_num number null,
test_name varchar2(255) null)
2、在APPS中创建同义词,并注册表和子段。
CREATE SYNONYM cux_seq_test for hwcust.cux_seq_test;
EXECUTE ad_dd.register_table('HW', 'cux_seq_test', 'T', 8, 10, 90);
EXECUTE ad_dd.register_column('HW', 'CUX_SEQ_TEST', 'TEST_NUM', 1, 'NUMBER', 30, 'Y', 'N' );
EXECUTE ad_dd.register_column('HW', 'CUX_SEQ_TEST', 'TEST_NAME', 2, 'VARCHAR2', 255, 'Y', 'N' );
3、Nav : System Administrator->Application->Document->Category
定义单据类别
| 字段 | 值 |
| Application | |
| code | CUX_TST |
| Name | 测试单据类别 |
| Description | 测试单据类别 |
| Table | CUX_SEQ_TEST |
4、定义单据序列
Nav : System Administrator->Application->Document->Define
| 拷贝号 | 姓名 |
| Name | HW_SEQ_TST |
| Application | |
5、序列分配:
Nav : System Administrator->Application->Document->Define
| 拷贝号 | 姓名 |
| Application | |
| Application | HW_SEQ_TST |
| Category | 测试单据类别 |
| Set of Books | |
| Sequence | HW_SEQ_TST |
procedure Get_seq_num is
begin
if (nvl(:parameter.seq_numbers, 'N') != 'N' and NOT Is_DB_Record) then
User_Exit('FND SEQCHK ' || 'APPLICATION_ID="20002" ' ||
'SET_OF_BOOKS_ID="' || TO_CHAR(:PARAMETER.SET_OF_BOOKS_ID) || '" ' ||
'CATEGORY="CUX_TST" ' || 'METHOD="A" ' ||
'TRX_DATE=":PARAMETER.TRX_DATE" ' || 'DOC_SEQUENCE_VALUE=":PARAMETER.INTEREST_INV_DOC_SEQ"');
if (Not Form_Success) then
Raise Form_Trigger_Failure;
end if;
end if;
:PARAMETER.INTEREST_INV_DOC_SEQ := NULL;
:PARAMETER.INTEREST_INV_DOC_SEQ_ID := NULL;
if (nvl(:parameter.seq_numbers, 'N') != 'N') then
User_Exit('FND SEQVAL ' || 'APPLICATION_ID="20002" ' ||
'SET_OF_BOOKS_ID="' || TO_CHAR(:PARAMETER.SET_OF_BOOKS_ID) || '" ' ||
'CATEGORY="CUX_TST" ' || 'METHOD="A" ' ||
'TRX_DATE=":PARAMETER.TRX_DATE" ' || 'DOC_SEQUENCE_VALUE=":PARAMETER.INTEREST_INV_DOC_SEQ" ' || 'DOC_SEQUENCE_VALUE_FIELD="PARAMETER.INTEREST_INV_DOC_SEQ"' || 'DOC_SEQUENCE_ID_FIELD="PARAMETER.INTEREST_INV_DOC_SEQ_ID"');
if (Not Form_Success) and (nvl(:parameter.seq_numbers, 'N') = 'A') then
:PARAMETER.INTEREST_INV_DOC_SEQ := NULL;
:PARAMETER.INTEREST_INV_DOC_SEQ_ID := NULL;
Raise Form_Trigger_Failure;
end if;
fnd_message.debug(to_char(:PARAMETER.INTEREST_INV_DOC_SEQ));
end if;
end;
FUNCTION Is_DB_Record RETURN Boolean IS
BEGIN
if (nvl(:system.record_status,:system.form_status)
in ('QUERY','CHANGED')) then
return TRUE;
else
return FALSE;
end if;
RETURN NULL; END Is_DB_Record;
6、在Form 中使用出口函数:
用Form 测试:
上图中,当我们点击 [GetSeq] 按钮时,我们就调用Get_seq_num ,然后 把值从参数
:PARAMETER.INTEREST_INV_DOC_SEQ 中取出来放入Test Num ,就出现如上结果。
每点击一次,就会取到一个序列。
那么,如果我们又不想序号自动生成了该怎么办?
我们只需要把单据序列分配失效就可以了。
我们在Form测试的时候,发现还是会自动生成。这说明,序列分配没有立即失效。
但是过了一段时间再作Form测试时,发现序号不会自动生成了。也就是我们失效序列分配的动作起作用了。
7、查看
首先,我们查找我们刚定义的单据序列 的doc_sequence_id =343 , 一般来说自己定义的单据序列的跟踪表是:FND_DOC_SEQUENCE_AUDIT。
select * from FND_DOC_SEQUENCE_AUDIT where doc_sequence_id = 343
AR 中的 单据序列
我们通过一个实验来看看 AR中的单据序列应用。
下面的步骤是Oracle 文档中描述的 ,为某种 “事务处理类型”启用单据序列所需要的步骤。
步骤 1 启用“连续编号”配置文件选项 (Sequential Numbering)
要实施单据序列,首先必须启用“连续编号”配置文件选项。您可以在地点层和(或)应用层设置此选项。要查看此选项的当前设置,请定位至“个人配置文件值”窗口,然后查询“连续编号”配置文件选项。
注:您可以在“个人配置文件值”窗口中查看此配置文件选项,但是不能对其进行更新。您可以通过浏览器访问此窗口。
有效的配置文件选项值为:
不使用
您可以始终输入事务处理。在输入事务处理时,光标将跳过“单据编号”字段。如果将此配置文件选项设置为此值,则不能使用“自动收款”功能。
始终使用
如果事务处理没有序列,则不能输入事务处理。此值要求您在输入事务处理时输入单据编号。
部分使用
即使事务处理没有序列,您也可以输入事务处理。但是,系统会向您发出警告。例如,如果要将连续编号用于自动收款而不作其它用途,则请使用此值。
注意:应收款管理系统的自动收款功能会在创建收款时使用单据序列。因此,如果要使用此功能,您必须将此配置文件选项设置为“部分使用”或“始终使用”。
在下面的实验中,我们设置成“部分使用”
步骤 2 定义“生成单据编号”配置文件选项(AR: Document Number Generation Level)
配置文件选项“AR:生成单据编号层”,使您可以确定应收款管理系统何时生成事务处理的单据编号。您可以选择在提交事务处理或完成事务处理时生成单据编号。默认值为“提交事务处理时”。
也就是说这个 “配置文件” 可以不设置,因为如果程序取不到这个“配置文件”的值,则 系统会在“提交事务处理”时生成单据编号。
在下面的实验中,我们不设置这个配置文件选项,也就是说,我们使用默认值。
步骤 3 选择单据编号是否与事务处理编号相同
在创建或导入事务处理时,事务处理批来源会确定是应收款管理系统自动生成批和事务处理编号,还是需要人工输入这些编号。事务处理批来源还会确定应收款管理系统对于单据和事务处理编号是否使用同一编号。
注:如果您的应用产品使用无间隙的单据排序,则此选项可确保事务处理编号也是无间隙的编号。
要确保事务处理批来源的单据编号和事务处理编号相同,请执行以下操作:
1. 定位至“事务处理来源”窗口。
2. 输入或查询事务处理来源。请参阅:事务处理批来源
3. 选定“将单据编号复制至事务处理编号”复选框。
4. 保存您所做的工作。
注意:如果“将单据编号复制至事务处理编号”选项设置为“是”,则应收款管理系统中可能有多个事务处理具有相同的事务处理编号和批来源。但是,对于同一种事务处理类型,单据编号和事务处理编号始终唯一。
在下面的实验中,我们会定义若干种事务处理来源批。分别两种情况
A: 选定“将单据编号复制至事务处理编号”复选框。
B: 不选定“将单据编号复制至事务处理编号”复选框。
参见下一章:《AR 中的 单据序列 试验》
步骤 4 定义序列
使用“单据序列”窗口来定义序列的名称、类型和初始值。您可以使用系统管理员责任来访问此窗口。
您无需为输入的每项事务处理定义不同的序列。例如,您可能决定只设置三个序列,分别用于、收款和调整。另外,您可能要将不同的序列分配给每种事务处理类型、付款方法和调整活动。
以下应收款管理系统事务处理必须具有自动序列类型。所有其它事务处理可以具有人工或自动序列。
调整冲销
自动调整
自动收款
拖欠款项调整
拖欠款项冲销
信用卡付款
承付款调整
财务费用调整
加密箱接收
应收款管理系统会在创建拖欠款项时生成拖欠款项调整。拖欠款项调整会减少拖欠款项所核销的事务处理的余额(核销额为拖欠款项额)。同样,系统会在您对定金或保证金开票时生成承付款调整。如果用定金来核销,则承付款调整会减少余额;如果用保证金来核销,则承付款调整会减少保证金余额。
系统会在您计算财务费用时创建财务费用调整。它们可用于按财务费用金额调整事务处理余额。
在删除具有与其相关的调整或拖欠款项的收款核销时,系统会生成调整和拖欠款项冲销。
建议:如果要使用自动开票,则可以在自动开票接口表中人工输入序号。但是,如果这些事务处理使用自动序列类型,则应收款管理系统会自动将序号分配给导入的事务处理。
在下面的实验中,我们定义一个单据序列:“AR 序号” 设置此单据序列为自动的。
步骤 5 将序列分配给类别
使用“单据序列”窗口将序列分配给下列单据弹性域的一个或多个组合:
核销
单据类别
事务处理日期范围
在定义新付款方法或事务处理类型,或定义类型为“调整”或“财务费用”的应收款活动时,应收款管理系统会相应地自动创建名称相同的单据类别。
核销和单据类别构成了单据弹性域。对于某个事务处理日期范围来说,每个有效的单据弹性域组合均必须唯一。
注:您可以将同一序列分配给一个或多个单据弹性域组合,但弹性域中的所有类别均必须指向同一核销表。
有关详情,请参阅:分配单据序列
步骤 6 在 Oracle General Ledger 中实施单据序列
如果安装了 Oracle General Ledger 并为此应用产品启用了连续编号,则在过帐之前必须定义日记帐分录类别的序列、类别和分配。
应收款将过帐至以下总帐管理系统的日记帐类别:
调整
拖欠款项
贷项通知单核销
贷项通知单
交叉货币(在 11 版中才出现)
借项通知单
杂项收款
销售
贸易收款
注:通过在应用层而非地点层设置“连续编号”配置文件选项,可对特定应用产品的单据进行排序。
AR 中的 单据序列 试验
步骤 1 定义一种新的事务处理类型
Nav : AR System administrator ->setup->transaction->Transaction Type
我们在AR 设置里面定义了一个事务处理类型 “INV-TST0101” 则系统会自动创建一种单据类别, 其名称也是 “INV-TST0101”。如下图。
只不过,系统不会自动为此单据类型分配序列。
步骤 2 使用新的事务处理类型 创建一笔事务
Nav : AR System administrator>Transactions->transactions
我们发现,使用这种事务处理类型来做一笔事务处理,则系统不会为这笔事务处理产生序列号。
步骤 3 为新的事务处理类型 对应的单据类别 分配序列
Nav : System administrator->Application ->Document->Assign
确认“连续编号”配置文件选项 (Sequential Numbering) 已经设置,本例中 设置为:部分使用 ,如下图。
步骤 4 使用新的事务处理类型 再创建一笔事务
Nav : AR System administrator>Transactions->transactions
我们发现,系统已经为这笔事务处理生成了单据序号。
步骤 5 查看数据库记录
事务处理头表 中会存储序列及序列的值,如下图:
AR 的序列审计表中会存储 序列生成的历史记录,如下图:
步骤 6 定义一种新的事务处理批来源,设置“事务处理编号”拷贝 “序列号”
Nav : AR System administrator ->setup->transactions->Source
定义这个 “事务处理来源批” 时,我们 勾选了”Automatic Transaction Numbering” 并设定 其 “Last Number =1000” .
保存时,系统会自动生成一个数据库 对象Sequence ,其格式为:
RA_TRX_NUMBER_ 也就是说,如果我们没有勾选“Copy Document Number to Transaction Number” , 则 使用 TSTBATCH001 作为“事务处理来源批”创建事务处理时,系统会自动生成 从1000开始的事务处理编号。 但是我们这里也勾选:“Copy Document Number to Transaction Number” ,然后我们看看创建事务处理时,系统如何处理? 步骤 7 使用TSTBATCH001 作为“事务处理来源批”创建事务处理 Nav : AR System administrator>Transactions->transactions 我们发现,系统并没有使用 “事务处理来源批” 中的设置 ,使用“单据序列”来作为“事务处理编号” 这是不是因为在 同时勾选 ”Automatic Transaction Numbering” 和“Copy Document Number to Transaction Number” 的情况下,系统优先使用 ”Automatic Transaction Numbering” 的设置呢? 我们可以再定义一种“事务处理来源批” 来验证这件事。 步骤8 定义一种新的事务处理批来源,不设置“自动事务处理编号” Nav : AR System administrator ->setup->transactions->Source 步骤9 使用TSTBATCH002作为“事务处理来源批”创建事务处理 Nav : AR System administrator>Transactions->transactions 在这种情况下,系统会设置 “事务处理编号”为 “需要手工录入,且必填”,所以我们必须随便填写一个编号,然后保存: 其结果是,系统依然没有实现 使用 “事务处理来源批” 中的设置 ,使用“单据序列”来作为“事务处理编号”的功能。 不过,如果我们把这张完成以后(输入几条行,并调整好收入帐户后按[Complete] 按钮)就不一样了,请看: 完成后,事务处理编号确实被复制成序列号了。这其实与Oracle文档中描述得并不一样。因为在 步骤2中 ,我们实际并未设置 系统配置文件:AR: Document Number Generation Level ,如下图: 理论上讲,应该在保存的时候,即把单据序列号复制到事务处理编号。但实际情况却是在完成时才实现这个动作。所以说,如果不设置 系统配置文件AR: Document Number Generation Level,其默认值 是 “在完成时生成事务处理编号(把单据据序列号复制到事务处理编号)”的。 步骤11 过帐到总帐 Nav : AR System administrator>Interface->Gereral Leger 我们调用 总帐接口程序 把这天的会计分配信息过帐到总帐接口,然后我们查询数据库可以看到:在总帐接口表 GL_interface 表中,单据序列号=45的会计分配信息都已经到了总帐接口表中了。单据序列号也被带到了总帐接口表。 我们接着往下走。 步骤12 总帐日记帐导入 Nav:GL Sytem Administrator ->Journals->Import->Run 导入完成后,我们可以在总帐日记帐中找到我们导入的会计分配信息: 查看数据库可见,单据序号被带入到日记帐行表 GL_Je_lines 中了 单据序列 的实用意义分析 按照 Oracle 的说法,使用单据序列的好处主要有三个: 1、单据序列可以提供完整性的证明。例如,单据序列可用于反映每项事务处理,甚至是失败的事务处理。 2、单据序列还可以提供跟踪线索。例如,单据序列可以提供一条从总帐到子分类帐,再到最初影响帐户余额的单据的跟踪线索。 3、由于单据序列会生成跟踪数据,因此即使单据被删除,它们的跟踪记录也会保留下来。 作用3的分析: 对于第3个作用,我们在步骤5已经能够体会到了。由于单据序列审计跟踪信息表:XX_DOC_SEQUENCE_AUDIT中的提供了一些列,这些列信息可以让我们知道:“某人在某天曾经创建过一个什么类型的单据”,但是,由于列数太少,没有纪录这个单据的其他信息,如果这个单据被删除了,也无法了解当时创建的单据具体输入了那些业务信息。所以这个作用有一定意义。但是单独看这个作用意义不大。只有为第一个作用服务的时候才能显示出一点实际意义。下文对作用1的分析,我们会提到这点实际意义。 作用2的分析: 对于第2个作用,我们还需要继续思考,我们主要关注从AR事务处理生成的单据序列号,究竟是怎样被一步一步传送到总帐中的。 以AR为例,首先,如果启用了序列,则 a) 在事务处理头信息表 RA_CUSTOMER_TRX_ALL 中就会生成 DOC_SEQUENCE_ID 和 DOC_SEQUENCE_VALUE。 b) 事务处理会计分配信息 表 RA_CUST_TRX_LINE_GL_DIST_ALL 中的内容通过和在事务处理头信息表 RA_CUSTOMER_TRX_ALL 关联可以获得DOC_SEQUENCE_ID 和 DOC_SEQUENCE_VALUE。 在过帐到总帐的时候,这两个字段被传给总帐接口表 GL_INTERFACE 的 SUBLEDGER_DOC_SEQUENCE_ID 和 SUBLEDGER_DOC_SEQUENCE_VALUE c) 数据从GL_Interface 导入到日记帐后这两个字段被传到日记帐行表GL_JE_LINES 中的 SUBLEDGER_DOC_SEQUENCE_ID 和 SUBLEDGER_DOC_SEQUENCE_VALUE。 所以如果启用了序列,则从总帐到子分类帐确实可以通过单据序列号来跟踪。 但是,事实上Oracle 从总帐到子分类帐的跟踪功能的实现却不是依据序列号进行的。 上图中,选择第一条日记帐,然后选Tools 菜单的 DrillDown ,则系统条用了如下代码: xla_open_form.open_drilldown( form_function => 'XLA_XLAIQDRL', set_of_books_id => gl_sob.sob_id, gl_acct_flex => :LINES.accounting_flexfield, gl_period => :LINES.period_name, je_source => :HEADER.je_source, je_category => :HEADER.je_category, je_header_id => :LINES.je_header_id, je_line_num => :LINES.je_line_num); 其中绿色字体的参数为三个关键参数。而Function ‘XLA_XLAIQDRL’对应的form是XLAIQDRL.fmb ,即下面这个界面: 在这个界面上,Oracle 已经把事务处理类型和编号都显示出来了。Oracle是如何查找的呢? 上面界面的Block的来源是:视图:XLA_AEL_GL_V 。但是实际上XLA_AEL_GL_V 视图是个虚的视图,其定义如下: CREATE OR REPLACE VIEW XLA_AEL_GL_V AS Select To_Number(Null) Je_Header_Id, To_Number(Null) Je_Line_Num, To_Number(Null) Accounted_Cr, To_Number(Null) Accounted_Dr, To_Date(Null) Accounting_Date, Null Acct_Line_Type, Null Acct_Line_Type_Name, To_Number(Null) Aeh_Id, To_Number(Null) Ael_Id, Null Ael_Table, Null Ae_Line_Reference, ...........(省略) From Dual Where 1 = 2 /* Always Fail */ 所以从这个视图是看不出任何取数逻辑的。不过可以使用F11 –>Ctrl + F11 后看System.last_query 得到其取数逻辑: 我们可以发现其实数据来源于视图: Xla_Ar_Inv_Ael_Gl_v 而这个视图又是来源于 视图 : Ar_Ael_Gl_Inv_v ,打开视图 : AR_AEL_GL_INV_V 可以看到真正的数据来源。 其实 Oracle 首先会 使用 AE_LINES_FOLDER.get_view_name() 函数,来初步判断这笔日记帐是来源于哪个模块的哪种业务类型,然后再决定从哪个视图中获取数据的 (这个判断逻辑中,视图名称是写死在代码中的) 。我们可以用如下语句获得这些视图: Select * From all_views Where view_name Like '%AEL_GL%V' And owner = 'APPS' Oracle 的判断逻辑可以归纳如下: 1、首先确定从哪张视图中查找来源 参见:《总帐日记帐-下钻-子模块-View List.xls》 2、根据Je_header_id 和 je_line_id 找到 Gl_Import_References 中的 Refrence 列,再据此找到子分类帐中相应的会计分配信息和事务处理信息。以AR为例, 其查找关系如下: GL_JE_LINES.je_header_id And GL_JE_LINES.je_line_num-> Gl_Import_References.Refrence3->Ra_Cust_Trx_Line_Gl_Dist_All. Cust_Trx_Line_Gl_Dist_Id->Ra_Customer_Trx_Lines_All.Customer_Trx_Line_Id 从上面的分析中可以看出,实际上Oralcle 是 根据总帐中的如下信息来实现到子分类帐的追踪的: a) 日记帐头表GL_JE_Headers 中的JE_CATEGORY 和 JE_SOURCE。 b) 日记帐行表GL_JE_Lines中的JE_HEADER_ID和 JE_LINE_NUM。 c) 日记帐导入参考历史表Gl_Import_References 中的Reference列。 可见,Oracle 从总帐到子分类帐的追踪根本就没有使用单据序列号的功能,所以说这单据序列的第2个功能,也作为使用序列的一个突出的好处 ,未免有点牵强。 作用1的分析: 至于说第1个作用,提供完整性证明,我们想,到是有一定的价值的。 如果在步骤1中把“连续编号”配置文件选项 (Sequential Numbering) 设置成 “始终使用” 那么系统就会强制要求每笔事务处理都有单据序列号,而且系统保证单据序列对每笔事务处理是唯一的。 在定义单据序列的时候把单据序列定义成 “自动”或者“无间隙”的。这样就保证单据编号是连续、不间断的。 那么在经过一段时间的运行以后,对于按照上述方式使用单据序列的事务处理类型,我们可以检查有没有哪张单据被人为的删除掉。这只需要检查这种类型的事务处理纪录,其单据序列值(Document_sequence_value) 有没有丢号。如果有丢号,我们还可以到 序列跟踪审计表XX_DOC_SEQUENCE_AUDIT中查找此丢掉的单据序列值,并且可以通过这条跟踪记录来获得信息:“某人在某天曾经创建过一个什么类型的单据”,从而为进一步的人工调查打下基础。 作用分析总结: 通过分析,我们认为“单据序列”比较有价值的地方只有一点,即: 如果某个用户基于具体业务的需求,认为某种事务处理必须使用“连续编号”进行跟踪。那么使用“单据序列”是Oracle 可以提供的一个方法。也就是Oracle 所说的“作用1” (4-Dec-96)
