`

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 



















  

 

分享到:
评论

相关推荐

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步优化PL/SQL程序的性能。 #### 八、实战案例分析 - **案例研究**:通过实际案例来演示如何综合运用前面章节所学的...

    绝对好的 oracle pl/sql 编程

    ### 绝对好的 Oracle PL/SQL 编程 #### 一、PL/SQL 程序设计简介 ##### 1.1 SQL 与 PL/SQL **1.1.1 什么是 PL/SQL?** PL/SQL(Procedure Language for SQL)是一种专门为 Oracle 数据库设计的过程化语言。它结合...

    PL/SQL 插件,节省好多时间哦

    5. **代码模板**:预设一些常用的PL/SQL代码块,比如常见的查询、插入、更新、删除操作,用户只需通过快捷键或菜单选择即可插入到当前编辑器中。 6. **智能提示**:增强的代码提示功能,帮助用户更快地了解和记忆SQL...

    PL/SQL学习资料(.doc)

    ### PL/SQL学习资料知识点详解 #### 一、PL/SQL概述 **1.1 PL/SQL的概念** PL/SQL(Procedural Language for SQL)是Oracle为支持其数据库产品而设计的一种专有的过程化语言。它将SQL命令与过程化语句结合在一起...

    PL/SQL 程序设计

    ### PL/SQL程序设计知识点详解 #### 一、PL/SQL概述 **1.1 什么是PL/SQL?...以上是关于PL/SQL程序设计的一些核心知识点和概念,通过学习这些内容,可以更好地理解和掌握如何利用PL/SQL来开发高效的数据库应用程序。

    PL/SQL 基础.doc

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

    PLSQL程序设计.pdf (清晰版)

    - **2.9.1 简单数据插入例子**:展示如何使用PL/SQL插入数据到数据库表。 - **2.9.2 简单数据删除例子**:演示如何使用PL/SQL删除数据。 #### 三、PL/SQL流程控制语句 **3.1 条件语句** PL/SQL支持`IF`、`ELSIF`...

    PL_SQL Developer日志生成插件的开发与应用.pdf

    PL/SQL Developer是一款常用的Oracle数据库交互工具,它便于数据库开发人员编写和调试PL/SQL程序。通过使用插件技术,开发者可以设计出能够与PL/SQL Developer无缝通信的插件,以此来扩展该工具的功能。 3. 数据...

    Oracle数据库系统中PL_SQL程序的自动生成 (1).pdf

    Oracle数据库系统中的PL/SQL(Procedural Language/Structured Query Language)是一种强大的过程化编程语言,它是Oracle数据库系统的核心组成部分,用于创建存储过程、函数、触发器和其他数据库对象。PL/SQL结合了...

    在Oracle PL/SQL中游标声明中表名动态变化的方法

    Oracle PL/SQL 中游标声明中表名动态变化的方法 在 Oracle PL/SQL 中, quando 声明中表名动态变化是指在游标声明中使用动态表名,而不是硬编码的表名。这是一种灵活的方法,可以根据不同情况选择不同的表名。 在 ...

    PLSQL教程-从入门到精通

    存储过程和函数是PL/SQL中最常用的对象类型之一,它们可以在数据库中存储并重复使用。 **6.1 创建函数** 函数是一种特殊的存储过程,它返回一个值。 **6.2 创建过程** 过程是一种没有返回值的存储过程。 **6.3 ...

    OraclePLSQL编程经典例子

    ### Oracle PL/SQL 编程经典例子解析 #### 一、PL/SQL 概述 PL/SQL(Procedural Language for SQL)是Oracle数据库专有的编程语言,它是在标准SQL的基础上进行了扩展,增强了编程能力。PL/SQL支持变量定义、流程...

    pl_sql函数大全

    根据提供的文件信息,本文将详细介绍PL/SQL中的一些常用函数及其用法,这些函数对于日常开发工作非常有帮助。 ### 1. ASCII 函数 ASCII 函数用于返回一个字符的 ASCII 值。例如: ``` SQL> SELECT ASCII('A') A, ...

    PLSql中文版安装程序

    1. **下载安装包**:在这个例子中,是名为"chinese.exe"的文件,这很可能是PL/SQL Developer的中文版安装程序。 2. **运行安装程序**:双击执行文件,按照向导提示进行安装。 3. **设置配置**:可能需要配置Oracle...

    oracle PL-SQL 学习笔记2

    在Oracle PL/SQL中,创建一个无参数的过程(Procedure)是非常基础且常见的操作。例如,在文中给出的例子中: ```sql CREATE OR REPLACE PROCEDURE pro_lz IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello Everyone'); END;...

    PL_SQL_Oracle基础教程

    它是最常用的`SQL`语句。 - `SELECT * FROM tablename;`:选择表格中的所有列。 - `SELECT columnname FROM tablename;`:选择表格中的特定列。 - `SELECT columnname, columnname, ... FROM tablename;`:选择...

    Oracle_存储过程.pdf

    在PL/SQL中,常用的数据类型包括: - **Number**:用于数值类型的存储,如`v_passRate number(5,2)`表示一个最多五位数字、小数点后两位的数值。 - **Varchar2**:用于存储可变长度的字符串,如`v_result varchar2...

    Oracle常用命令,常用的一些命令都有

    1. PL/SQL程序设计:PL/SQL是Oracle数据库的过程化扩展语言,提供了处理复杂业务逻辑的强大能力。在文档中提到了PL/SQL程序的设计,比如如何设置游标、使用变量、控制结构、错误处理以及存储过程、函数和包的建立与...

    sql学习SQL教程

    1. SELECT语句:这是最常用的SQL语句,用于从一个或多个表中检索数据。可以指定要选择的列、过滤条件(WHERE子句)、排序(ORDER BY子句)和分组(GROUP BY子句)。 2. JOIN操作:用于将两个或更多表的数据结合在...

Global site tag (gtag.js) - Google Analytics