语法结构:

DECLARE --声明部分
--v_name VARCHAR2(20); --直接声明类型
v_name emp.ename%TYPE; --获取emp.ename列的类型
BEGIN
--赋值
--v_name := 'zhangsan'; --执行部分
--将表中的列查询出来,存放到变量中。不能返回多行记录。类型要一致
SELECT ename INTO v_name FROM emp WHERE empno=7369;
dbms_output.put_line(v_name);
END;

案例:

--判断用户是否有奖金
DECLARE
V_COMM EMP.COMM%TYPE;
BEGIN
SELECT COMM INTO V_COMM FROM EMP WHERE EMP.EMPNO = 7499;
IF V_COMM >= 500 THEN
DBMS_OUTPUT.PUT_LINE('这个月双倍奖金!');
ELSIF V_COMM >= 300 THEN
DBMS_OUTPUT.PUT_LINE('这个月有奖金!');
ELSE
DBMS_OUTPUT.PUT_LINE('这个月没有奖金!');
END IF;
END;

--case语句
--第一种写法:类似java中的switch结构
DECLARE
V_DEPTNO EMP.DEPTNO%TYPE;
BEGIN
SELECT emp.deptno INTO V_DEPTNO FROM EMP WHERE EMP.EMPNO = 7369;
CASE V_DEPTNO
WHEN 10 THEN
DBMS_OUTPUT.PUT_LINE('财务部');
WHEN 20 THEN
DBMS_OUTPUT.PUT_LINE('人事部');
WHEN 30 THEN
DBMS_OUTPUT.PUT_LINE('销售部');
WHEN 40 THEN
DBMS_OUTPUT.PUT_LINE('研发部');
END CASE;
END;

--第二种写法:类似java中的多重elseif结构
DECLARE
v_sal emp.sal%TYPE;
v_empno NUMBER := # --运行时,弹出输入框,输入变量的值
BEGIN
SELECT emp.sal INTO v_sal FROM EMP WHERE EMP.EMPNO = v_empno;
CASE
WHEN v_sal >= 3000 THEN
DBMS_OUTPUT.PUT_LINE('工资非常棒');
WHEN v_sal >= 2000 THEN
DBMS_OUTPUT.PUT_LINE('工资不错');
WHEN v_sal >= 1000 THEN
DBMS_OUTPUT.PUT_LINE('工资还行');
ELSE
DBMS_OUTPUT.PUT_LINE('工资惨不忍睹');
END CASE;
END;


--循环结构
--LOOP
DECLARE
v_sum NUMBER := 0;
v_i NUMBER := 0;
BEGIN
LOOP
v_sum := v_sum + v_i;
v_i := v_i + 1;
EXIT WHEN v_i > 100; --退出循环的条件
END LOOP;
DBMS_OUTPUT.PUT_LINE('和为:'||v_sum);
END;