0 说明:
a) 和java一样,是一种语言,不过后者是面向对象的,前者是面向过程的
b) 操作对象是数据库表
c) PL/SQL = Procedure Language/SQL,是oracle在sql语句中增加了过程处理语句 eg: 分支,循环
d) 效率很高,在oracle中操作数据库最快的语言就是plsql,对于实时性要求高的系统,建议将一些逻辑写成PLSQL,并让比如java等语言来直接调用
e) sql server中对sql功能扩展的是Transact-sql,类似于oracle的pl/sql功能
1 hello world:
set serveroutput on; declare begin dbms_output.put_line('hello zm'); end; / 说明: 1默认情况下 oracle的输出开关是关闭的,因此需要开启 , 2 / 表示退出并执行
执行结果如下:
hello zm
PL/SQL 过程已成功完成。
2 语法介绍:
a)变量和常量:
1 类型: char, varchar2,date,number,boolean,long
2 声明顺序: name char(40); married boolean :=true; money number(7,2); :=表示赋值
3 赋值可以用 := 也可以用 into
3 定义引用类型变量 pname emp.ename%type; (定义变量pname,其类型和表emp的字段ename一致)
set serveroutput on declare --定义变量 pename emp.ename%type; psal emp.sal%type; begin -- 执行赋值语句 select ename,sal into pename,psal from emp where empno = 7839; -- 打印变量结果 dbms_output.put_line(pename ||'的薪水是'||psal); end; / 执行结果: KING的薪水是50004 定义引用类型变量---列记录,emp_rec emp%rowtype, 案例如下:
declare --记录型变量 代表一行记录 emp_rec emp%rowtype; begin -- 将emp表中empno=7839的所有列数据拷贝结构同时赋值给 emp_rec select * into emp_rec from emp where empno=7839; dbms_output.put_line(emp_rec.ename||'的编号是'||emp_rec.empno); end; / 结果: KING的编号是7839
b)If 语句
格式: IF 条件 THEN 语句1; 语句2; END IF; IF 条件 THEN 语句序列1; ELSE 语句序列2; // // 注意 elseif 在 plsql中写成 elsif END IF; IF 条件 THEN 语句; ELSIF 语句 THEN 语句; END IF;
案例如下:
--判断用户输入的数字 set serveroutput on --接收键盘输入 --num: 地址值,在该地址上,存了输入的值 accept num prompt '请输入一个数字'; declare --定义变量保存输入的数字 --隐式转换 将键盘输入的字符串转变成我们需要的int -- &num 表示指针num对应内存的数值 pnum number := # begin if pnum = 0 then dbms_output.put_line('您输入的是0'); elsif pnum = 1 then dbms_output.put_line('您输入的是1'); elsif pnum = 2 then dbms_output.put_line('您输入的是2'); else dbms_output.put_line('其他数字'); end if; end; / 输入4 结果: 其他数字
c)循环 语句
格式如下:
while total <= 10000 loop total := total + salary; end loop; loop exit[when 条件] ... end loop; for i in 1..3 loop ...; end loop;
案例如下:
--打印1~10 set serveroutput on declare pnum number := 1; begin loop --当符合pnum>10时,退出循环, 否则执行循环体内容 exit when pnum > 10; -- 循环体内容 dbms_output.put_line(pnum); pnum := pnum + 1; -- 结束循环 end loop; end; /