首先,当在cmd里办入scott密码提示错误时,可以这样改一下,scott的解锁命令是: 以system用户登录: cmd sqlplus system/tigertiger alter user scott identified by "tiger" account unlock; -学习块的结构 --学习定义变量(了解数据类型)及赋值 --了解:各种PL/SQL块的类型 --块的结构 --案例:根据工号,输出员工姓名 SELECT * FROM emp; --块! DECLARE v_empno NUMBER(4); v_ename VARCHAR2(10); BEGIN v_empno := &请输入工号; --必须要将查询结果放到变量 SELECT ename INTO v_ename FROM emp WHERE empno=v_empno; dbms_output.put_line(v_ename); END; --异常 DECLARE v_empno NUMBER(4); v_ename VARCHAR2(10); BEGIN v_empno := &请输入工号; --必须要将查询结果放到变量 SELECT ename INTO v_ename FROM emp WHERE empno=v_empno; dbms_output.put_line(v_ename); EXCEPTION WHEN OTHERS THEN dbms_output.put_line('执行出错了,老板!'); END; --小结 DECLARE --变量区(不能在begin..end中定义) BEGIN --业务代码区 excetipn --异常捕获区 END; --定义变量(了解数据类型) --2种:保存一个值=简单变量;保存多个值=复合变量 --简单变量类型:char,varchar2,number,date(同时也列类型),boolean,表.字段%type --复合变量:表%rowtype,record DECLARE v_empno NUMBER(4); v_ename VARCHAR2(10); v_job emp.job%TYPE; --如果字段类型改变,脚本不需要改变 BEGIN v_empno := 7566; SELECT ename,job INTO v_ename,v_job FROM emp WHERE empno=v_empno; dbms_output.put_line(v_ename); IF(v_job='MANAGER')THEN dbms_output.put_line('经理,吃过饭没。'); END IF; END; --需要同上,将多个变量放到一个记录对象中 DECLARE v_empno NUMBER(4); my_row emp%ROWTYPE; BEGIN v_empno := 7566; SELECT * INTO my_row FROM emp WHERE empno=v_empno; dbms_output.put_line(my_row.ename||','||my_row.sal); END; --有时不需要一整列,只需要其中几个列。此时用record DECLARE --自定义复合类型 my_emp TYPE my_emp_type IS RECORD( yg_name emp.ename%TYPE, yg_sal emp.sal%TYPE ); my_row my_emp_type; --变量名 数据类型 BEGIN SELECT ename,sal INTO my_row FROM emp WHERE empno=7788; dbms_output.put_line(my_row.yg_name||','||my_row.yg_sal); END; --扩展:Oracle没有boolean类型? --思考:性别 true=男,false=女。缺点?性别=保密。所以Oracle建立用char(1)替代,1=男2=女3=保密4=人妖 --Oracle的各种集合类型,对应 java的数组。 --引用变量:在讲解存储过程以后再讲解。 --绑定变量(命令窗口中执行,绑定变量用了 :) SQL> var name varchar2(10) SQL> execute :name :='hello'; PL/SQL procedure successfully completed name --------- hello SQL> print name; name --------- hello