暂无图片
数据库 着急
我来答
分享
刘锦舟
2019-11-10
数据库 着急

运用sql语句创建一张数据表doctor(医生表),字段如下:id(医生编号)、name(姓名)、sal(工资)。在doctor表的id字段设立主键;sal字段保留小数点后2位。运用序列向doctor表中插入10条记录。
要求:编写一个存储过程,输入医生编号和选项(1个字符串参数),当用户输入的选项值为1时给医生涨工资。如果其工资低于3000则增长25%;如果大于等于3000工资则增长15;如果大于等于5000则增长5%。在给医生涨工资时,运用触发器技术实现将医生的原工资和增长后的工资插入到数据表salary(薪资表)中,salary表中字段如下:id(编号)、oldsal(原来工资)、newsal(增长后工资)。在salary表的id字段设立主键;oldsal和newsal保留小数点后2位。当输入参数2=2时,删除员工的信息。

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
章芋文

你好,可以简单说下哪一步你不会,或者有疑问的?

具体是建表语句,还是存储过程

暂无图片 评论
暂无图片 有用 0
刘锦舟

简单来说,我会建表并插入语句,之后涨工资不懂,上课时没有听明白,就是存储过程这方面的问题,您能演示一下吗

暂无图片 评论
暂无图片 有用 0
章芋文

简单手写了下,没建表。可能要调试

--存储需要调用,不能直接接收输入,采用匿名代码块方式 set serveroutput on; ACCEPT OID NUMBER PROMPT '请输入医生ID : '; ACCEPT OP varchar(20) PROMPT '请输入操作 : '; DECLARE v_oid number := &v_oid; v_op varchar := &v_op; v_sal doctor.sal%type; BEGIN IF( v_op = 1 ) THEN SELECT sal INTO v_sal FROM doctor WHERE id = v_oid; if (v_sal < 3000) then update doctor set sal = sal*1.25 where id = v_oid; else if (v_sal >= 3000 && v_sal < 5000) then update doctor set sal = sal*1.15 where id = v_oid; else if (v_sal >= 5000) then update doctor set sal = sal*1.05 where id = v_oid; dbms_output.put_line('a is less than 20 ' ); end if; ELSE IF ( v_op = 2 ) THEN delete from doctor where id = v_oid; END IF; END; / --触发器记录日志 create or replace trigger tri_log_doctor_sal after update of sal on doctor for each row begin insert into log_doctor_sal (id,oldsal,newsal) values (:old.id,:old.sal,:new.sal); end;
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏