首页 > 解决方案 > Oracle 11g:如何生成会计科目表中的数字

问题描述

在 oracle 11g(SQL 或 PL/SQL)中,对于会计科目表,我想生成如下数字:从 2 级开始:(1 级 a/c 编号为 1、2、3、4、5)

如果它在头1中是资产,那么它将生成第一个数字为101 如果它在头2中是负债,那么它将生成第一个数字为201

3级;

如果选择父级101那么它将生成第一个 a/c 编号为10101 如果选择父级102那么它将生成第一个 a/c 编号为10201

等等....

第 4 级:

如果选择父级 10101那么它将生成 First a/c number 为10101001 如果选择父级10201那么它将生成 First a/c number 为10201001

等等...

和所有其他总账户相同(2=负债,3=费用,4=收入 5=资本)

请帮忙。

标签: oracleoracle11gnumbersaccountgenerate

解决方案


非常感谢EJ Egyed有兴趣提供帮助,我在下面编写了对我来说很好的函数。

create or replace function get_value_no( v_value_level in number,
                                         v_value_abbreviation in varchar2,
                                         v_value_parent in number)
 return number is
 --
 -- create trigger or function, in case of function pass following columns as parameters
 -- value_leve, value_abbreviation, value_parent_acct
 v_value_level number := 3;
 v_value_abbreviation char(1) := 'L'; -- (A)sset (L)iability (E)xpense (R)evenue (C)apital
 v_valno number;
 v_parent number := 203; -- parent account which user will select 
 v_char  varchar2(20);
begin

 -- ======================
 if v_value_level in (2, 3) then
   select max(nvl(value_no,0))
    into v_valno
    from value_set
   where value_level = v_value_level
    and value_abbreviation = v_value_abbreviation
    and value_type = 'NA'
    and value_parent_acct = v_value_parent;
   if v_valno is null or v_valno <= 0 then
    v_char := to_char(v_value_parent)||'01';
    v_valno := v_char;
   else
    v_valno := v_valno+1;
   end if;
 end if;
 -- ======================
 if v_value_level = 4 then
   select max(nvl(value_no,0))
    into v_valno
    from value_set
   where value_level = v_value_level
    and value_abbreviation = v_value_abbreviation
    and value_type = 'NA'
    and value_parent_acct = v_value_parent;
   if v_valno is null or v_valno <= 0 then
    v_char := to_char(v_value_parent)||'001';
    v_valno := v_char;
   else
    v_valno := v_valno+1;
   end if;
 end if;
 -- ======================
return v_valno;
-- 
end;

推荐阅读