Nar*_*rma 5 java oracle sequence
我正在寻找解决自定义序列生成问题的选项.让我通过举个例子来描述我的问题:
比方说,公司和员工表有两个表,
Table: Company
-----------------------------------------------
CompanyId | CompanyName | LatestSequenceValue
-----------------------------------------------
c1 | XYZ | 100
c2 | ABC | 150
-----------------------------------------------
Table: Employee
----------------------------------------------------------
EmployeeId | EmployeeName | CompanyId | EmployeeSurveyNo
----------------------------------------------------------
e1 | NVERMA | c1 | 101
e1 | DAVID | c1 | 102
e2 | VGUPTA | c2 | 151
e2 | MAC | c2 | 152
----------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
每当员工加入公司时,他都会被要求完成公司特定的调查,并在完成调查后,根据公司表格中的LatestSequenceValue生成" 调查编号 " .
要生成调查,不执行以下步骤:
在将上述方法转换为程序/逻辑之前,应牢记以下几点:
什么应该是解决这个自定义序列生成问题的正确方法?
数据库级别的乐观锁定可能是个好主意.但这种方法可能会以某种方式降低性能.
有没有内存序列生成可以处理上述问题并提高性能?
我们非常欢迎您的想法/建议.
我的一位同事对此给出了很好的答案。
\n\n解决方案:
\n\n当持久化到数据库中时,使用组合_[例如100_001]来唯一标识一条记录。这样我们就不必为 n # 个公司创建 n # 个 Oracle 序列。我们可以创建一个,它将为所有公司生成序列的主要版本部分。但是,如果所有公司数据都托管在同一数据库中,则这将起作用。只是一个想法。
\n\n通过这种方式,我们可以避免创建数千个序列,同时又能够为每个公司提供独特性。
\n\nSQL> create sequence s1 start with 1000;\n\nSequence created.\n\nSQL> create sequence s2 start with 6000;\n\nSequence created.\n\nSQL> select to_char(s1.nextval)||'-'||to_char(s2.nextval) from dual;\n\nTO_CHAR(S1.NEXTVAL)||'-'||TO_C\n-------------------------------- \n1000-6000\n\nSQL> select to_char(s1.currval)||'-'||to_char(s2.nextval) from dual;\n\nTO_CHAR(S1.CURRVAL)||'-'||TO_C\n------------------------------ \n1000-6001\nRun Code Online (Sandbox Code Playgroud)\n\n对于下一家公司,您可能有 1001-6001 等。所以我们用两个序列来管理一切。
\n| 归档时间: |
|
| 查看次数: |
1694 次 |
| 最近记录: |