set serverout on
declare
v_empno emp.empno%type:=&p_empno;
v_sal emp.sal%type;
beginselect sal into v_sal from emp where empno= v_emono;
if v_sal<1500then
dbms_output.put_line('工资等级为一级');
elseif v_sal<3000then
dbms_output.put_line('工资等级为一级');
else
dbms_output.put_line('工资等级为一级');
endif;
end;
/
2.LOOP简单循环(打印1-10)
set serverout ondeclare
--定义循环初始值
i number(10):=0;begin
loop
--改变增量
i:=i+1;
dbms_output.put_line(i);
--循环退出条件
exit when i = 10;
end loop;end;
/
3.LOOP 打印偶数值
declare
i number(10):=0;
begin
loopifmod(i,2)=0then
dbms_output.put_line(i);
endif;
i:i+1;
exitwhen i = 10;
endloop;
end;
/
4.while循环打印1-10
set serverout ondeclare
i number(10):=0;begin
--定义 while 循环
while i<=10 loop
--循环操作
dbms_output.put_line(i);--改变循环条件
i:=i+1;
end loop;end;
/
### 5.FOR 循环
set serverout onbeginfor i in1..10 loop
dbms_output.put_line(i);end loop;end;
/
6.批量添加数据
-- 生成随机字符 dbms_random.string(选项,长度);
-- 选项:u 表示大写字母,L表示小写字母,x表示数字和字母混合,p 任意字符
-- 随机生成数字:语法1:dbms_random.value (0,1);
-- dbms_random.value*num; 0到 num 的随机数
-- dbms_random.value(min,max); 生成 min 到 max 随机数
-- 随机数取整:round(dbms_random.value(min,max); 四舍五入
trunc(dbms_random.value(min,max); 将数字的小数部分截去
set serverout on
declare
v_deptno dept.deptno%type:=&p_deptno;
begin
delete from emp where deptno=v_deptno;
-- SQL%rowcount 记录删除的行数;如果 rowcount>0,表示已经删除员工。
if SQL%rowcount>0then
-- 再删除部门
delete from dept where deptno=v_deptno;
dbms_output.put_line('部门编号为:'||v_deptno||'的部门信息已经删除!');
else
-- 员工数目为空
dbms_output.put_line('部门编号为:'||v_deptno||'的员工信息已经删除!');
endif;
end;
/
9.显示游标,查询员工中前10条数据,分别提取 ename,sal
set serverout ondeclare
-- 1.定义游标
cursor cursor_emp
isselect ename,sal from emp where rownum<=10;-- 定义两个变量,分别来接受游标提取两列的值
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
-- 2.打开游标
open cursor_emp;-- 3.提取游标内的第一行数据中的两类数据分别赋予两个变量
fetch cursor_emp into v_ename,v_sal;
-- 4.循环打印提取游标内容,发现下一行就循环,类似 jdbc
while cursor_emp%fount loop
dbms_output.put_line(v_ename||'---'||v_sal);-- 改变循环条件,查看是否有下一条数据
fetch cursor_emp into v_ename,v_sal;
end loop;-- 5.关闭游标
close cursor_emp;
end;
/
10.使用游标变量来提取部门编号为20的所有员工信息
set serverout ondeclare
-- 1.定义弱类型游标
TYPE emp_cursor_type IS REF CURSOR;
( 强类型 REF_CURSOR 返回的数据类型和长度在编译期就应该指明,而弱类型 REF_CURSOR 不需要。)
-- 2.定义游标类型
v_cursor_emp EMP_CURSOR_TYPE;
-- 3.定义游标类型变量的行记录,指的是,游标提取的一条数据中
的列数和列名和数据库类一致
v_emp_record emp%ROWTYPE;
begin
-- 4.打开游标
open v_cursor_emp for sleect * from emp where deptno=20;-- 5.循环提取游标内容
loop
-- 5.1 提取游标内容到行记录
fetch v_cursor_emp into v_emp_record;
-- 5.2 打印提取的数据
dbms_output.put_line('ename:'||v_emp_record);
-- 5.3 定义循环退出条件
exit when v_cursor_emp%notfound;
end loop;-- 6.关闭游标
close v_cursor_emp;
end;
/
11. 使用 for 循环提取游标内容
set severout ondeclare
-- 1.定义游标
cursor cursor_emp
isselect ename,sal from emp where rownum<=10;begin
-- 自动打开,提取,关闭
for i in cursor_emp loop
dbms_output.put_line(i.ename||'---'||i.sal);end loop;end;
/