表空间是放置表的地方 user都可以放表进去 用户创建的表默认放在USERS表空间下
一个user可以有自己特有的的多张表
块的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]‘;
emp_lname employees.last_name%TYPE;//emp_lname跟employees表中的last_name变量类型一样 %ROWTYPE跟一行的类型一样 是个复合类型
声明BIND(环境)变量
VARIABLE b_salary NUMBER
begin
select salary INTO :b_salary FROM.........;
end;
/
PRINT b_salary
2.使用序列化(例:主键自动加1)
在11g里
declare
v_new_id NUMBER;
begin
v_new_id:=my_seq.NEXTVAL;
end;
/
在11g以前版本
declare
v_new_id NUMBER;
begin
select my_seq.NEXTVAL INTO v_new_id from Dual(哑表)
end;
/
3.显式类型转换
TO_CHAR()
TO_DATE()
TO_NUMBER()
TO_TIMESTAMP()
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个字符
7.SQL CURSOR (游标)
查询你修改或删除语句的结果statement为语句 expression为表达式
SQL%FOUND 布尔型 是否影响
SQL%NOTFOUND 布尔型 否是影响
SQL%ROWCOUNT int型 影响了多少行数据
8.判断控制语句
if ...
then...
end if;
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
...
版权声明:本文为博主原创文章,未经博主允许不得转载。
plsql
标签: