一、匿名块
1、使用returning ... INTO 保存增删改表数据时的一些列的值
(01)增加数据时保存数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
INSERT INTO emp(empno,ename,JOB,sal,comm,deptno) VALUES(&no,'zhaoliu','deve',3000,500,10) RETURNING ename,sal INTO v_ename,v_sal;
dbms_output.put_line(v_ename || ','||v_sal);
end;
---打开控制台输出开关
SET serveroutput ON;
(02)修改数据时保存数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%type;
BEGIN
UPDATE emp SET sal=sal+100 WHERE empno=&no RETURNING ename,sal INTO v_ename,v_sal;
dbms_output.put_line(v_ename || ','||v_sal);
END;
(03)删除数据时保存数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
DELETE FROM emp WHERE empno=&no RETURNING ename,sal INTO v_ename,v_sal;
dbms_output.put_line(v_ename || ','||v_sal);
END;
二、分支结构
1、if
IF 条件 THEN 结果;
END IF;
IF 条件 THEN 结果;
ELSE 结果;
END IF;
IF 条件 THEN 结果;
elsif 条件 THEN 结果;
....
ELSE 结果;
END IF;
---查询一个员工薪水,判断员工薪水如果大于3000,输出他是一个白领;如果工资小于等于3000大于1500,输出他是一个蓝领;其它情况输出是一个灰领;
DECLARE
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM emp WHERE empno=&no;
IF v_sal>3000 THEN
dbms_output.put_line('白领');
elsif v_sal>1500 THEN
dbms_output.put_line('蓝领');
ELSE dbms_output.put_line('灰领');
END IF;
END;
2、case:
格式一:
CASE WHEN 条件 THEN 结果;
WHEN 条件 THEN 结果;
...
ELSE 结果;
END CASE;
格式二:
CASE 条件表达式 WHEN 值1 THEN 结果1;
WHEN 值2 THEN 结果2;
....
ELSE 结果m;
END CASE;
---输入一个成绩,判断该成绩等级,如果在99~90之间,返回为A,如果在89~80之间,返回为B,如果在79~70之间,返回C,其它返回为D
DECLARE
v_score NUMBER(3);
v_flag VARCHAR2(1);
BEGIN
v_score:=&score;
CASE trunc(v_score/10) WHEN 9 THEN v_flag:='A';
WHEN 8 THEN v_flag:='B';
WHEN 7 THEN v_flag:='C';
ELSE v_flag:='D';
END CASE;
dbms_output.put_line(v_score || ',该 成绩的等级为:' || v_flag);
END;
三、循环结构
1、直到型循环
loop
执行循环体;
exit WHEN 条件;
END loop;
---在控制台输出1~5
DECLARE
v_i NUMBER(1):=1;
BEGIN
loop
dbms_output.put_line(v_i);
v_i:=v_i+1;
exit WHEN v_i>5;
END loop;
end;
2、while:
while 条件
1、使用returning ... INTO 保存增删改表数据时的一些列的值
(01)增加数据时保存数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
INSERT INTO emp(empno,ename,JOB,sal,comm,deptno) VALUES(&no,'zhaoliu','deve',3000,500,10) RETURNING ename,sal INTO v_ename,v_sal;
dbms_output.put_line(v_ename || ','||v_sal);
end;
---打开控制台输出开关
SET serveroutput ON;
(02)修改数据时保存数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%type;
BEGIN
UPDATE emp SET sal=sal+100 WHERE empno=&no RETURNING ename,sal INTO v_ename,v_sal;
dbms_output.put_line(v_ename || ','||v_sal);
END;
(03)删除数据时保存数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
DELETE FROM emp WHERE empno=&no RETURNING ename,sal INTO v_ename,v_sal;
dbms_output.put_line(v_ename || ','||v_sal);
END;
二、分支结构
1、if
IF 条件 THEN 结果;
END IF;
IF 条件 THEN 结果;
ELSE 结果;
END IF;
IF 条件 THEN 结果;
elsif 条件 THEN 结果;
....
ELSE 结果;
END IF;
---查询一个员工薪水,判断员工薪水如果大于3000,输出他是一个白领;如果工资小于等于3000大于1500,输出他是一个蓝领;其它情况输出是一个灰领;
DECLARE
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM emp WHERE empno=&no;
IF v_sal>3000 THEN
dbms_output.put_line('白领');
elsif v_sal>1500 THEN
dbms_output.put_line('蓝领');
ELSE dbms_output.put_line('灰领');
END IF;
END;
2、case:
格式一:
CASE WHEN 条件 THEN 结果;
WHEN 条件 THEN 结果;
...
ELSE 结果;
END CASE;
格式二:
CASE 条件表达式 WHEN 值1 THEN 结果1;
WHEN 值2 THEN 结果2;
....
ELSE 结果m;
END CASE;
---输入一个成绩,判断该成绩等级,如果在99~90之间,返回为A,如果在89~80之间,返回为B,如果在79~70之间,返回C,其它返回为D
DECLARE
v_score NUMBER(3);
v_flag VARCHAR2(1);
BEGIN
v_score:=&score;
CASE trunc(v_score/10) WHEN 9 THEN v_flag:='A';
WHEN 8 THEN v_flag:='B';
WHEN 7 THEN v_flag:='C';
ELSE v_flag:='D';
END CASE;
dbms_output.put_line(v_score || ',该 成绩的等级为:' || v_flag);
END;
三、循环结构
1、直到型循环
loop
执行循环体;
exit WHEN 条件;
END loop;
---在控制台输出1~5
DECLARE
v_i NUMBER(1):=1;
BEGIN
loop
dbms_output.put_line(v_i);
v_i:=v_i+1;
exit WHEN v_i>5;
END loop;
end;
2、while:
while 条件