`

pl/sql一些常用小例子

SQL 
阅读更多
游标:
隐式游标:sql%found,sql%notfound;
显示游标:cursor my_cur is .....;
open ..,
fetch ..into,
while xx loop 
	(fetch into);
end loop;

for 打开游标;
for my_row in my_cursor loop
end loop;

参数游标;

更新游标;for update of username;

 打开游标 open cur_student;
循环游标
  loop
    fetch cur_student into rs_student;
    exit when cur_student%notfound;
    update t_user set username = 'newusername' where current of cur_student;
  end loop;
关闭游标
  close cur_student;
  commit;


ref 游标:
TYPE ref_cursor is REF cursor;
  cur_student ref_cursor;
  rs_student  t_student%rowtype;

 打开游标 open cur_student for select * from t_student;
循环游标
  loop
    fetch cur_student into rs_student;
    exit when cur_student%notfound;
    dbms_output.put_line(rs_student.name || rs_student.id);
  end loop;
关闭游标
  close cur_student;

存储过程:
1.不带任何参数
2.带默认参数
3.带in,out参数
4.带游标

函数
1.带参数,返回参数
2.带变量,返回变量,返回值后无须加分号。
3.sql调用函数

程序包
1.create or replace package my_package
  is
    procedure my_pro(userid number);
    function my_fun(userid number) return varchar2;
  end;

2.定义游标

cursor my_cursor(user_id number) return t_user%rowtype;
调用游标
cursor my_cursor(user_id number) return t_user%rowtype  
           is select * from t_user >user_id;
           
    procedure my_pro(user_id number)
    as
     user_row t_user%rowtype;
     begin
          open my_cursor(user_id);
          loop
              fetch my_cursor into user_row;
              exit when my_cursor%notfound;
              dbms_output.put_line(user_row.username||'12');
          end loop;
     end;


触发器

create or replace trigger first_trigger before insert on t_user 
for each row
begin
     select seq_t_user.nextval into :new.userid from dual;
end;

instead of触发器
create or replace trigger third_trigger instead of update on t_user_view
for each row
begin
     update t_user set username=:new.username where userid=:new.userid;
end;

------------------------------------模式触发器

create or replace trigger four_trigger after  drop or create on schema
begin
     INSERT INTO t_user(username,email)
  VALUES( ORA_DICT_OBJ_NAME, 
          ORA_DICT_OBJ_TYPE);
end; 

drop table test;

----------------------------------------------for update 和 for update of 字段 

1 

select * from TTable1 for update 

锁定表的所有行,只能读不能写 

2 

select * from TTable1 where pkid = 1 for update 

只锁定pkid=1的行 

3 

select  * from Table1 a join Table2 b on a.pkid=b.pkid for update 

锁定两个表的所有记录 

4 

select  * from Table1 a join Table2 b on a.pkid=b.pkid  where  a.pkid = 10 for update 

锁定两个表的中满足条件的行 

5. 

select  * from Table1 a join Table2 b on a.pkid=b.pkid  where  a.pkid = 10 for update of a.pkid 

只锁定Table1中满足条件的行 

-----------------------
for update 是把所有的表都锁点 
for update of 根据of 后表的条件锁定相对应的表 

-------------------------------------------------------------
多个表关联的时候for update 会锁定所有的表
for update of table_name.column_name 可以控制要锁定的表


--------------------
组成视图的各表中如果都有主键,那对视图和表for update of 效果基本一样。但如果各个基表中没有主键,更新视图就不允许了












select a.*,b.* from t_user a,t_user_address b where a.userid=b.userid for update 



















  

 

分享到:
评论

相关推荐

    pl/sql高级编程针对oracle

    一些PL/SQL的语法已经常用例子,希望对初学者有帮助!

    pl/sql及常见实用oracle语句学习

    这是本人在实践中收集总结的,有存储过程、序列、游标、触发器、索引及其它一些常用的语句(如日期、over partion by具体使用包括一些例子),还有两本高清这方面的书,一起放在里面,方便大家学习。

    PL/SQL 基础.doc

    PL/SQL对大小写不敏感(注意) 4. 标识符命名规则答: 1) 字母开头; 2) 后跟任意的 非空格字符 数字 货币符号( $ ) 下划线( _ ) 或 # ; 3) 最大长度为30个字符(八个字符左右最合适); 用来给对象命名(潜规则):...

    数据库基础

    §1.3 SQL、SQL*Plus及 PL/SQL 25 §1.3.1 SQL和SQL*PLUS的差别 25 §1.3.2 PL/SQL语言 27 §1.4 登录到SQL*PLUS 27 §1.4.1 UNIX环境 27 §1.4.2 Windows NT和WINDOWS/2000环境 29 §1.5 常用SQL*PLUS 附加命令简介...

    Oracle8i_9i数据库基础

    §1.3 SQL、SQL*Plus及 PL/SQL 25 §1.3.1 SQL和SQL*PLUS的差别 25 §1.3.2 PL/SQL语言 27 §1.4 登录到SQL*PLUS 27 §1.4.1 UNIX环境 27 §1.4.2 Windows NT和WINDOWS/2000环境 29 §1.5 常用SQL*PLUS 附加命令简介...

    oracle常用函数

     SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY等子句中,例如下面的例子中就包含了...

    Oracle PL SQL基础培训教程

    内容丰富,基本涵盖了大部分常用的数据语言。有详细的例子,能清晰的学习ORACLE.

    数据库基础 ORACLE

    §1.3 SQL、SQL*Plus及 PL/SQL 25 §1.3.1 SQL和SQL*PLUS的差别 25 §1.3.2 PL/SQL语言 26 §1.4 登录到SQL*PLUS 27 §1.4.1 UNIX环境 27 §1.4.2 Windows NT和WINDOWS/2000环境 29 §1.5 常用SQL*PLUS 附加命令简介...

    Toad 使用快速入门

    Code Library:大量的严谨的PL/SQL代码例子和现成过程,完全源代码提供 各种错误处理模块可供参考,各类字符日期函数 包含1400多个主题 Admin: 解答DBA日常工作中80%的常见问题,覆盖2400多个主题 从网络...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.2.5 将子查询因子化应用到PL/SQL中 270 10.3 递归子查询 273 10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY...

    ORACLE之常用FAQ V1.0(整理)

    第一部分、SQL&PL/SQL 4 [Q]怎么样查询特殊字符,如通配符%与_ 4 [Q]如何插入单引号到数据库表中 4 [Q]怎样设置事务一致性 4 [Q]怎么样利用游标更新数据 4 [Q]怎样自定义异常 4 [Q]十进制与十六进制的转换 4 [Q]怎么...

    ORACLE11G宝典.rar 是光盘里面的内容,书太厚咧没法影印啊

    《Oracle11g宝典》共分19章,第1~4章分别介绍了Oracle11g的下载和安装、SQL*Plus的使用、SQ语言与PL/SQL.程序设计,第5~9章分别介绍了Oracle11g的体系结构、表空间与数据文件的管理、启动和关闭数据库、网络服务...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下面我们就简单介绍些系统角色:  CONNECT, RESOURCE, DBA这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库...

    ORACLE9i_优化设计与系统调整

    §3.4 DBA常用参数说明 71 §3.4.1 跟踪文件路径(BACKGROUND_DUMP_DEST) 71 §3.4.2 在缓冲区驻留对象(BUFFER_POOL_KEEP) 71 §3.4.3 版本兼容(COMPATIBLE) 72 §3.4.4 控制文件路径(CONTROL_FILES) 72 §...

    php网络开发完全手册

    2.5.1 简单的表达式例子 36 2.5.2 表达式的分类 36 2.5.3 算术操作表达式 36 2.5.4 字符串操作表达式 38 2.5.5 逻辑操作表达式 38 2.5.6 比较操作表达式 39 2.5.7 位操作表达式 40 2.5.8 运算符的优先级 41 2.6 特殊...

    asp.net知识库

    Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步...

Global site tag (gtag.js) - Google Analytics