--问题输出 下面的内容:oracle世界我来了,一刀999
--declare用于定义变量dbms_output.put_line()是输出语句,
--DECLARE
--BEGIN
--END
DECLARE
msg varchar2(20) := 'Hello';
BEGIN
dbms_output.put_line(msg||' oracle世界我来了,一刀999');
END;
/
-------------------“/”手动输入,输入/可以结束程序-----------------------
--输出语句显示到当前窗口的前提,一个窗口使用一次就可以了
set serveroutput on
/
declare
sex char(1) := 'M';
begin
if sex='M' then
dbms_output.put_line('帅哥');
elsif sex='F'then
dbms_output.put_line('美女');
else
dbms_output.put_line('小孩');
end if;
end;
/
使用if 判断条件 输入 一个数字 1 2 3
如果 数字 1 输出优秀
如果 数字 2 输出很优秀
如果 数字 3 输出非常优秀
---------“&n”:会弹出窗口,输入交互------------
declare
nu number(1) := &n;
begin
if nu=1 then
dbms_output.put_line('优秀');
elsif nu=2 then
dbms_output.put_line('很优秀');
else
dbms_output.put_line('非常优秀');
end if;
end;
/
有一个NUMBER(3)变量,
如果大于0显示1;
如果小于0显示-1;
如果等于0显示0;
declare
n number(3) :=10;
begin
if n>0 then
dbms_output.put_line(1);
elsif n<0 then
dbms_output.put_line(-1);
else
dbms_output.put_line(0);
end if;
end;
/
转变为交互式的写法
在c#中
按cw按两下tab输出
if一下tab快捷if框架
其他快捷键自己设置
page163--7.6,7.8
declare
v_deptno emp.deptno%type;
v_empno emp.empno%type;
v_sal number(6,2);
begin
v_empno:=&no;
select deptno,sal INTO v_deptno,v_sal FROM emp WHERE empno=v_empno;
if v_deptno = 10 THEN
UPDATE emp SET sal=v_sal+100 WHERE empno = v_empno;
elsif v_deptno=20 then
UPDATE emp SET sal=v_sal+200 WHERE empno = v_empno;
elsif v_deptno=30 then
UPDATE emp SET sal=v_sal+300 WHERE empno = v_empno;
else
UPDATE emp SET sal=v_sal+400 WHERE empno = v_empno;
end if;
end;
-----------------
set serverout on
declare
i number:=1;
begin
LOOP
Dbms_output.put_line(i||'的立方为'||i*i*i);
i:=i+1;
exit when i>5;
end loop;
end;
------------------------------------------
--for循环,
--FOR ... in ... LOOP:循环条件
--END LOOP;
BEGIN
FOR i IN 1..50 LOOP
dbms_output.put_line(i*i+1);
END LOOP;
END;
问题 1 到 50 ?
3到40 ?
------------------------------------------
--用变量查询7900职员的姓名工资入职日期,工作
declare
v_name varchar2(10);
v_sal number(7,2);
v_job emp.job%type ;
v_HIREDATE emp.hiredate%type;
begin
select ename,sal,hiredate,job
into v_name,v_sal,v_HIREDATE,v_job
from emp
where empno=7900;
dbms_output.put_line('职员姓名:'||v_name);
dbms_output.put_line('工资:'||v_sal);
dbms_output.put_line('入职日期:'||v_HIREDATE);
dbms_output.put_line('工作:'||v_job);
end;
/
-----------------------------------------
--用变量输出king这个人的信息包含他的工作编号empno
--emp.job%type:同emp表的数据类型一致
declare
v_empno number(10);
v_name varchar2(10);
v_sal number(7,2);
v_job emp.job%type ;
v_hiredate emp.hiredate%type;
begin
select ename,empno,sal,hiredate,job
into v_name,v_empno,v_sal,v_hiredate,v_job
from emp
where ename='KING';
dbms_output.put_line('姓名:'||v_name);
dbms_output.put_line('职工编号:'||v_empno);
dbms_output.put_line('工资:'||v_sal);
dbms_output.put_line('入职日期:'||v_hiredate);
dbms_output.put_line('工作:'||v_job);
end;
/
--------------------------------------
编写一段PL/SQL,实现计算个人
所得税计算逻辑。(参考图例的扣除方法)
3500免征
如果超过3500,按以下阶段方式扣除
--小于1500时,税率按3%,速算扣除数0
--在1500到4500区间时,税率10%,速算扣除数105
--在4500到9000区间时,税率20%,速算扣除数555
--大于等于9000时,税率25%,速算扣除数1005
declare
v_sal number(10):= 10000;
v_tax number(7,2);
v_tax_sal number(10);
begin
--计算出应交税的工资部分
v_tax_sal := v_sal-3500;
--判断区间
if v_tax_sal<1500 then
v_tax := v_tax_sal*0.03;
elsif v_tax_sal<4500 then
v_tax := v_tax_sal*0.1-105;
elsif v_tax_sal<9000 then
v_tax := v_tax_sal*0.2-555;
else
v_tax := v_tax_sal*0.25-1005;
end if;
dbms_output.put_line('工资:'||v_sal);
dbms_output.put_line('交税:'||v_tax);
end;
declare
sal number(10):=&n;
v_tax number(7,2);
begin
if sal>3500 and sal<5000 then
v_tax:=sal*0.03;
dbms_output.put_line('扣税:'|| v_tax);
end if;
end;
-----------------------------------------------------
新增需求
根据EMP表记录生成纳税记录表的信息
纳税记录表EMP_TAX
主键ID
员工编号EMPNO
员工名称ENAME
员工工资总额SAL (EMP中SAL+COMM合计)
纳税额TAX(根据前面扣税逻辑计算的金额)
纳税时间TAX_DATE(系统时间)
编写一个PL/SQL完成上述功能
create table emp_tax(
ID NUMBER primary key,
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
SAL NUMBER(7,2),
TAX NUMBER(7,2),
TAX_DATE DATE
);
create sequence tax_seq;
-----PL/SQL---------
declare
CURSOR c_emp IS select * from emp;
v_emp emp%ROWTYPE;--记录变量,保存一行员工信息
v_total emp.sal%TYPE;--工资总额
v_tax_sal emp.sal%TYPE;--交税工资
v_tax emp.sal%TYPE;--交税金额
begin
OPEN c_emp;
LOOP
--循环取出EMP表每一行员工记录
fetch c_emp into v_emp;
exit when c_emp%NOTFOUND;
--计算员工应交税金额TAX
v_total := v_emp.sal+NVL(v_emp.comm,0);
v_tax_sal := v_total-3500;
--判断区间
if v_tax_sal<=0 then
v_tax :=0;
elsif v_tax_sal<1500 then
v_tax := v_tax_sal*0.03;
elsif v_tax_sal<4500 then
v_tax := v_tax_sal*0.1-105;
elsif v_tax_sal<9000 then
v_tax := v_tax_sal*0.2-555;
else
v_tax := v_tax_sal*0.25-1005;
end if;
--将EMP_TAX所需的字段值写入INSERT
insert into EMP_TAX(id,empno,
ename,sal,tax,tax_date)
values(tax_seq.nextval,v_emp.empno,
v_emp.ename,v_total,v_tax,sysdate);
END LOOP;
CLOSE c_emp;
commit;--提交操作
end;