DECLARE --声明部分
v_sal NUMBER(5) NOTNULL :=0;--赋初值为0,若写not null必须附一个值,声明常量是要用const
--多行的时候要用fetchinto游标来赋值
--执行部分
BEGIN
--查询工号7369的工资,并将该工资保存到变量v_sal中
--使用select..into..给变量赋值
SELECT sal
INTO v_sal
FROM emp
WHERE empno = 1000;
--输出v_sal的值
dbms_output.put_line('工资是:' || v_sal);
--判断,如果工资小于2000,则给该员工加上500
IF v_sal < 2000THEN
UPDATE emp
SET sal = sal + 500
WHERE empno = 7369;
dbms_output.put_line('更新成功');
ENDIF;
--异常处理
EXCEPTION
--当没有查找到指定工号的数据时,发生该异常
WHEN no_data_found THEN dbms_output.put_line('没有查询到相关数据');
--others捕获其他不明确的异常
WHENOTHERSTHEN
dbms_output.put_line('发生了其他异常');
END;
SELECT * FROM emp WHERE empno = 7369;
----------------------------------------------------------------------------
DECLARE
--指定员工的姓名,
v_ename emp.ename%TYPE;--VARCHAR2(20) ,%TYPE表示v_ename的数据类型和表emp中的ename字段的数据类型一致
v_sal emp.sal%TYPE;
v_empno emp.empno%TYPE:=&empno;--&表示从键盘上输入
BEGIN
SELECT ename,sal
INTO v_ename,v_sal
FROM emp
WHERE empno = v_empno;
--输出员工姓名和工资
dbms_output.put_line('员工姓名:' || v_ename || ',员工工资:' || v_sal);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('你输入的员工工号不存在!');
END;
----------------------------------------------------------------------------
--属性类型:%ROWTYPE
DECLARE
v_emp emp%ROWTYPE;--%ROWTYPE表示变量v_emp表和emp表一行的数据类型是一致的
v_empno emp.empno%TYPE:=&empno;
BEGIN
--查询指定工号的员工所有信息,保存在记录类型v_emp中
SELECT *
INTO v_emp--所有的变量都保存在v_emp里
FROM emp
WHERE empno = v_empno;
--输出指定员工的信息
dbms_output.put_line('员工工号:' || v_emp.empno ||
',员工姓名:' || v_emp.ename ||
',员工工资:' || v_emp.job ||
',工作岗位:' || v_emp.sal);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('你输入的工号不存在!');
END;
-----------------------------------------------------------------------------
--记录类型
DECLARE
--自定义记录类型(也是数据类型的一种)
TYPE emp_rec ISRECORD(
v_ename emp.ename%TYPE,
v_sal emp.sal%TYPE,
v_deptno emp.deptno%TYPE
);
--定义一个emp_rec类型的变量
v_emp emp_rec;
v_empno emp.empno%TYPE:=&empno;
BEGIN
SELECT ename,sal,deptno
INTO v_emp
FROM emp
WHERE empno = v_empno;
--输出指定员工的信息
dbms_output.put_line('员工姓名:' || v_emp.v_ename ||
',员工工资:' || v_emp.v_sal ||
',部门编号:' || v_emp.v_deptno);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('你输入的工号不存在!');
END;
-----------------------------------------------------------------------------------
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
v_deptno emp.deptno%TYPE:=&deptno;
BEGIN
SELECT ename,sal
INTO v_ename,v_sal
FROM emp
WHERE deptno = v_deptno;
dbms_output.put_line('员工姓名:' || v_emp.v_ename ||
',员工工资:' || v_emp.v_sal ||
',部门编号:' || v_emp.v_deptno);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('你输入的部门编号不存在!');
WHEN too_many_rows THEN
dbms_output.put_line('查询返回多行记录!');
WHENOTHERSTHEN
dbms_output.put_line('发生其他异常!');
END;
----------------------------------------------------------------------
--loop-exit-end
DECLARE
v_num NUMBER:=0;
BEGIN
LOOP
v_num:=v_num+1;
EXITWHEN (v_num =10);--表示退出条件
ENDLOOP;
dbms_output.put_line('v_num:' || v_num);
END;
--------------------------------------------------------------------------
--while-loop-end
DECLARE
v_num NUMBER:=0;
BEGIN
WHILE v_num<10LOOP
v_num := v_num + 1;
ENDLOOP;
dbms_output.put_line('v_num:' || v_num);
END;
-----------------------------------------------------------------------
--for-in-loop-end
DECLARE
v_num NUMBER:=0;
i NUMBER;
BEGIN
FOR i IN1..10 LOOP --在in后加reverse 作i--操作
dbms_output.put_line('i=' || i);
v_num := v_num + 1;
ENDLOOP;
dbms_output.put_line('v_num:' || v_num);
END;