plsql

表空间是放置表的地方 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
...
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值