to GerryYang(轻尘) 新曾的时候不可能是最大数加1没那么简单,是按部门按时间排一次序,有可能记录插在中间,后面记录的序号要+1
to ORARichard(没钱的日子......) 我想知道难度系数最大是多少啊?
感觉如果把后面那个字段text分开来存放,处理起来要方便得多,效率也会提高很多。 给个思路: procedure before_insert(p_time varchar2,p_text varchar2) is v_text varchar2(20):=null; begin select max(substr(text,-2)) into v_text from text where time=p_time and substr(text,6,1)= substr(p_text,6,1); if v_text is null then v_text:=substr(p_text,1,7)||'01'; else v_text:=substr(p_text,1,7)||lpad(to_char(to_number(v_text)+1),2,'0'); end if; --here,insert p_time & v_text into your table insert into text values (p_time,v_text); end before_insert;procedure before_update(p_time varchar2,p_text varchar2,p_time_new varchar2,p_text_new varchar2) is v_text varchar2(20):=null; begin delete text where time=p_time and text=p_text; --here,insert p_time_new & p_text_new your table before_insert(p_time_new,p_text_new); end before_update;删除的时候可能会打乱以前的序号排列,这个不知道有没有需求对已有的序号重新调整。 如果有需求的话,可以写一个before_delete逻辑进行重新排序(会比较复杂一点)。
不是得到最大序号,是在以有的记录中按时间排序
新曾的时候不可能是最大数加1没那么简单,是按部门按时间排一次序,有可能记录插在中间,后面记录的序号要+1
我想知道难度系数最大是多少啊?
给个思路:
procedure before_insert(p_time varchar2,p_text varchar2) is
v_text varchar2(20):=null;
begin
select max(substr(text,-2))
into v_text
from text
where time=p_time
and substr(text,6,1)= substr(p_text,6,1);
if v_text is null then
v_text:=substr(p_text,1,7)||'01';
else
v_text:=substr(p_text,1,7)||lpad(to_char(to_number(v_text)+1),2,'0');
end if;
--here,insert p_time & v_text into your table
insert into text values (p_time,v_text);
end before_insert;procedure before_update(p_time varchar2,p_text varchar2,p_time_new varchar2,p_text_new varchar2) is
v_text varchar2(20):=null;
begin
delete text where time=p_time and text=p_text;
--here,insert p_time_new & p_text_new your table
before_insert(p_time_new,p_text_new);
end before_update;删除的时候可能会打乱以前的序号排列,这个不知道有没有需求对已有的序号重新调整。
如果有需求的话,可以写一个before_delete逻辑进行重新排序(会比较复杂一点)。
建议楼主
1。 将表结构修改,把text字段拆成三个字段(表示序号的字段可以取消)
2。 在查询表时,将字段组合成“时间-部门-序号”。(序号可以通过分析函数取得)
你的过程好象能完成我的逻辑需要,但是现在很奇怪,为什么我执行你这个过程就
输入 v_text 的值: 2008-a-01
原值 14: --here,insert p_time & v_text into your table
新值 14: --here,insert p_time 2008-a-01 into your table
procedure before_insert(p_time varchar2,p_text varchar2) is
*
ERROR 位于第 1 行:
ORA-00900: 无效 SQL 语句
不是应该要我输入p_time和p_text吗?
我现在也很想拆成3段~十分的想
去掉我过程里面的注释信息就好了。
就是删掉‘--’所在的行。
不行我试了
SQL> show error;
PROCEDURE BEFORE_INSERT 出现错误:LINE/COL ERROR
-------- ----------------------------------
14/5 PL/SQL: SQL Statement ignored
14/17 PL/SQL: ORA-00947: 没有足够的值