一、简介
pl/sql可以一次性发送多条sql语句到数据库,同时具有变量,流程控制,是结构化与过程化的结合体。
1.语法结构
declare
--声明部分:定义变量,常量,游标
begin
--程序编写,sql语句(执行部分)
exception
--处理异常
end;
2.第一个块
declare
v_num NUMBER :=10;
BEGIN
DBMS_OUTPUT.PUT_LINE('This string breaks
here.'||V_NUM);
END;
注意:默认情况下DBMS_OUTPUT.PUT_LINE无法使用,需要设置set serveroutput on;
3.定义键盘输入
declare
v_num NUMBER :=10;
BEGIN
v_num:=&v_num;
DBMS_OUTPUT.PUT_LINE('This string breaks
here.'||V_NUM);
END;
4.查询数据字典所有关键字
select *from v$reserved_words;
5.声明变量语法
变量名称[constant] 类型 [not null] [:=value]
注意:pl/sql中变量名不区分大小写。
6.使用%type声明变量(变量与表中某列类型一样)
DECLARE
v_eno emp.empno%TYPE ; -- 与empno类型相同
v_ename emp.ename%TYPE ; -- 与ename类型相同
BEGIN
DBMS_OUTPUT.put_line('请输入雇员编号:') ;
v_eno := &empno ; -- 由键盘输入雇员编号
SELECT ename INTO v_ename FROM emp WHERE empno= v_eno ;
DBMS_OUTPUT.put_line('编号为:' || v_eno || '雇员的名字为:'|| v_ename) ;
END ;
7.%rowtype(标记一行记录类型)
DECLARE
emprow emp%ROWTYPE;
BEGIN
SELECT * INTO emprow FROM emp WHERE empno= 7369 ;
DBMS_OUTPUT.put_line('编号为:' || emprow.empno || '雇员的名字为:'|| emprow.ename) ;
END ;
二、运算符
1.赋值运算符(变量:=表达式;)
2.连接运算符(||)
3.关系运算符(判断两个操作数据的大小,返回值为true或者false,如果有一个为null,最终结果也为null)
关系运算符:>,<,>=,<=,!=,<>
判断null:is null ,is not null
范围查询:between and
范围查询:in
模糊查询:like
4.逻辑运算符(and or not)
三、标量类型
1.数值型
2.字符型
3.日期型
4.大对象型
5.布尔型
四、程序结构
1.分支结构
如:
if condition then
meet the condition;
end if;
if condition then
meet the condition;
else
not meet the condition
end if ;
if condition then
meet the condition;
elseif condition then
meet the condition
...
else
not meet the condition ;
end if;
注意:condition 可以使用regexp_like()函数正则验。也可以使用case when代替if语句。
2.循环结构
2.1.loop循环
loop
loop excute block;
exit when loop end condtion;
loop end condition alter;
end loop;
while(condition) loop
loop excute block;
loop end condition alter;
end loop;
例如
DECLARE
v_i NUMBER := 1 ; -- 定义一个变量,用于循环
BEGIN
LOOP
DBMS_OUTPUT.put_line('v_i = ' || v_i) ;
EXIT WHEN v_i >= 3 ;
v_i := v_i + 1 ;
END LOOP ;
END ;
2.2.for循环
for loop_index in[reverse] start...end Loop
loop block;
end loop;
例如:
v_i NUMBER := 1 ; -- 定义一个变量,用于循环
BEGIN
FOR v_i IN 1 .. 3 LOOP
DBMS_OUTPUT.put_line('v_i = ' || v_i) ;
END LOOP ;
END ;
降序:
DECLARE
v_i NUMBER := 1 ; -- 定义一个变量,用于循环
BEGIN
FOR v_i IN REVERSE 1 .. 3 LOOP
DBMS_OUTPUT.put_line('v_i = ' || v_i) ;
END LOOP ;
END ;
注意:循环控制exit(退出循环),continue(退出本次循环)
五.内部程序块
六.异常处理