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的薪水是5000
4 定义引用类型变量---列记录,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;
/