块的3种形式
匿名块Anonymous 变编译边执行不保存在数据库
有名块 保存在数据库
Procedure Function
匿名块编写
declare
v_fname VARCHAR2(20);
begin
select first_name
into v_fname --把查询到的放入v_fname
from employees
where employee_id=100;
dbms_output.put_line(‘first name is‘||v_fname);
end;
/
变量声明
v_fname VARCHAR2(20) NOT NULL :=‘Mike‘;赋值是:= 判断相等是=
如果 赋值里面有单引号
v_fname VARCHAR2(20) NOT NULL :=‘Mike‘‘john‘;
或
v_fname VARCHAR2(20) NOT NULL :=q‘!Mike‘john!‘;
或
v_fname VARCHAR2(20) NOT NULL :=q‘[Mike‘john]‘;
4.嵌套下变量的作用范围
使用修饰语区分成员变量和局部变量
begin<<aaa>>
declare
v_new_id NUMBER;
begin
declare
v_new_id NUMBER;
begin
dbms_output.put_line(aaa.v_new_id);
end;
end;
end aaa;
5.操作数据的方法
insert
update
delete
merge(合并2张表 相同的行更新)
begin
merge into copy_emp c //目标表copy_emp别名c
using employees e // 源表employees别名e
on (e.employee_id=c.empno) // 条件当e.employee_id=c.empno
WHEN MATCHED THEN // 条件成立时
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
...
WHEN NOT MATCHED THEN // 条件不成立时
INSERT VALUES(e.first_name,e.last_name,e.email,....);
end;
/
6.transaction可以有多个plsql块block
要显式提交commit
col columnname format a20
col就是column的缩写,FORMAT A15是设置对应的列宽度,A20就是宽度为15个字符
if... (if null<11-->null)
then...
elsif...(注意!不是elseif)
then...
else...
end if;
case 变量或者没有
when...then...
when...then...
when...then...
else
end case;
9.null语句
null值黑洞的例外
false and null->false
true or null->true
短路现象
and 中有一个是false 就是false
or 中有一个是true 就是true
如果想跳到程序末尾 标签《aaa》后面不能接END 否则编译不能通过
begin
if condition
then goto aaa
end if
...
<<aaa>>
null;
end;
10.循环语句
(1)basic loop
LOOP
statement;
....
EXIT WHEN condition
END LOOP;
(2)while loop
WHILE condition LOOP
statement;
...
END LOOP;
(3)for loop
FOR counter IN [REVERSE]// REVERSE颠倒->upper_bound..lower_bound
lower_bound..upper_bound LOOP
statement;
...
END LOOP;
continue 进入下一次循环
GOTO无条件跳转
11.复合数据类型
record==c++的structure
connection
declare
TYPE t_rec IS RECORD
(v_sal number(8),
.....
);
v_myrec t_rec;//声明赋值
begin
...