需求:我要在employee 表中插入数据,如果表里是空的话,第一行employee_id字段 默认为 ' emp1001 ',以后再插入
的话自动加1  即 emp1002, emp1003,.....
一下是我在sql2000里创建的存储过程 测试成功CREATE  proc proc_employee_insert
@employee_id varchar(50) = null,
@employee_name varchar(50),as
 select @employee_id=max(employee_id)  from tb_employee
if (@employee_id is null)
set @employee_id = 'emp1001'
else
  select @employee_id='emp' + cast((cast(substring(max(employee_ID),4,4) as int)+1) as varchar) from tb_employee
begin
insert into tb_employee values (@employee_id,@employee_name)
endGO
问提: 我现在要转到oracle里 该如何写; 我自己写了好几次都不行 。其中oracle中的cast函数和sql2000用法一样,
substring 函数 现在是 substr
表如下:
oracle 中创建的表employee
create table employee
(
   employee_id varchar2(50) not null,
   employee_name varchar2(50)
)

解决方案 »

  1.   


    create or replace procedure proc_employee_insert
    (
    employee_id in varchar2(50),
    employee_name in varchar2()

    as
    begin
    select max(employee_id) into employee_id  from tb_employee;
    if employee_id is null then
    set employee_id := 'emp1001';
    else 
    select 'emp' || LPAD(substr(max(employee_ID), 4, 4) + 1, 4, '0') into employee_id from tb_employee;
    end if;
    insert into tb_employee values (employee_id,employee_name);
    commit;  
    EXCEPTION
      WHEN others THEN
        rollback;
      RETURN;
    end proc_employee_insert;
      

  2.   

    employee_id := 'emp1001'那行多了一个set