- 浏览: 342348 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
努力吧飞翔:
...
[ExtJS] MVC应用架构示例 -
coolnight:
[Maven]Nexus 安装与配置 -
Kevin_jiang2011:
官网的文档写的不好。 简单的执行命令,又要重新下载一个ecli ...
jBPM5 入门 -
litterdeer:
好东西....
[ExtJS] MVC应用架构示例 -
basherone:
可以用,谢谢了
[ExtJS] MVC应用架构示例
oracle 存储过程基础
-------------------
-- 包与包体
-- 存储过程
-- 设置输出缓冲
SET SERVEROUTPUT ON SIZE 1000000;
-- 编译存储过程
alter procedure procedure_name compile;
-- 执行存储过程
exec plsql_template('100000');
-- 查看错误
SHOW ERRORS
SHOW ERROR procedure plsql_template;
-- 函数
-- 变量
-- 游标
-- 静态游标: 声明时绑定查询语句
-- 动态游标 : 打开时绑定查询语句
-- 强限制返回类型
-- 弱限制返回类型
-- type trec is record(...);
-- type dcursor is ref cursor return trec;
-- dcur dcursor;
-- rec trec;
-- open dcur for select * from t;
-- fetch dcur into rec;
-- while dcur%found loop
-- ...
-- fetch dcur into rec;
-- end loop;
-- 显式游标
-- declare
-- open
-- fetch
-- close
-- 隐式游标
-- dml sql%rowcount
-- for
-- 参数游标
-- 无参数游标
-- 游标属性
-- %FOUND:变量最后从游标中获取记录的时候,在结果集中找到了记录。
-- %NOTFOUND:变量最后从游标中获取记录的时候,在结果集中没有找到记录。
-- %ROWCOUNT:当前时刻已经从游标中获取的记录数量。
-- %ISOPEN:是否打开。
-- 使用游标更新变量
-- 行共享锁
cursor cursor_name(parameter_name datetype) is select_statement for update [of column_reference] [nowait];
-- 引用当前游标数据
update table_name set column = .. where current of cursor_name;
-- 控制结构
-- 条件
if condition then
expression
end if
if condition then
expression1
else
expression2
end if
if condition1 then
expression1
elsif condition2 then
expression2
else
expression3
end if
case variable
when value1 then expression1
when value2 then expression2
else expression3
end case;
-- 循环
loop
exit when condition;
...
end loop;
while condition loop
...
end loop;
for variable in [reverse] lower .. upper loop
...
end loop;
-- 嵌套循环
-- 标记法
<<outer>>
for i in 1..100 loop
<<inner>>
for j in 1..100 loop
...
exit outer when result=1000;
exit when result=500;
end loop inner;
end loop outer;
-- 类型
-- record 一行多列
-- ref cursor 游标指针
-- 集合
-- table 多行单列 BINARY_INTEGER | PLS_INTEGER
-- first
-- firor
-- next
-- last
-- count
-- exists
-- delete
-- nested table 子表 无元素个数限制 下标从1开始
-- varray 多行单列 数组 有元素个数限制 下标从1开始 需要使用构造函数创建类据
-- first
-- firor
-- next
-- last
-- count
-- exists
-- limit
-- extend
-- trim
-- 组合
-- 记录表 多行多列
-- 多维数组 多行多列
-- 批量处理
-- bulk collect
-- select
-- select * bulk collect into record_table from t;
-- dml
-- delete from emp where deptno=&no;
-- returning ename bulk collect into ename_table;
-- fetch
-- fetch cur bulk collect into t [limit 100];
-- for all
-- for all i in 1..10000
-- sqlstmt;
--
-- 过滤空值
-- for all i in indeces of collection
-- sqlstmt;
-- 批量属性
-- sql%bulk_rowcount 取得在执行批量绑定操作时第i个元素所作用的行数
-- 绑定变量
-- &绑定变量名
-- 调用时绑定变量的使用
-- sql: var name varchar2(20);
-- exec procedure_name(:name);
-- 存储过程语法规则
-- 1 参数部分
-- 1. 参数默认为IN
-- 2. 没有参数列表时, 括号不用写
-- 3. 参数的类型不需要声明长度
-- 4. 参数IN为只读, 可以有默认值; 参数OUT/INOUT为可写, 不能有默认值
-- 5. 可以使用%TYPE, %ROWTYPE
-- 6. 格式: 参数 IN|OUT|INOUT 类型 默认值
-- 2 声明块
-- 1. 声明类型需要长度
-- 2. 可以使用%TYPE, %ROWTYPE
-- 3. 不需要写 declare
-- 4. 赋值不是=,而是:=
-- 5. 字符常量使用单引号 ''
-- 6. 语句块以;结束
-- 7. 不能使用保留字
-- 8. 变量可以有默认值
-- 9. 与JAVA相反先写变量后写类型
-- 10. 支持自治事务
-- 3 代码块
-- 1. 条件分支语句中是 elsif 不是 elseif
-- 2. :绑定变量
-- 3. &绑定变量占位符
-- 4. select * into v
-- 5. return 退出过程 exit 退出循环
-- 6. 静态SQL可以写DML, SELECT, TCL; 动态SQL还可以写 DDL, DCL
-- 7. 游标记得关闭, 多使用隐式游标
-- 8. 事务要记得提交或回滚
-- 9. 多使用批量
-- 10. 少使用动态SQL
-- 11. DML查询子句前没有AS
-- 12. 一定要做校验
-- 13. 一定要写注释
-- 4 异常块
-- 1. 自定义异常处理
-- 2. 记录异常日志(表)
-- 3. 回滚失败操作
-- 4. 清理
-- 5 涉及关键字
-- sql
select
select ... into
insert into
update
delete from
merge
-- dynamic sql
execute immediate
-- tcl
commit
rollback
savepoint
set transaction
-- dcl
grant
revoke
-- ddl
create
alter
drop
truncate
-- type
cursor
type
table
varray
nested table
record
ref cursor
object
-- cursor
open
open for
fetch ... into
close
-- batch
forall
bulk collect
-- other
&
:=
%ROWTYPE
%TYPE
%FOUND
%NOTFOUND
where current of cursor_name
exception when
exit when
return
goto
null
using
of
-- hints
/*+ append */
-- 触发器
行级触发器: 插入,更新,删除操作每一行触发一次.:NEW, :OLD有效,有WHEN子句.
语句级触发器: 插入,更新,删除操作每条SQL触发一次.:NEW, :OLD无效,没有WHEN子句.
系统级触发器: 系统事件触发.
行级更新触发器: 更新可指定列操作触发, 语句级不可指定可指定列.
BIR 触发器: Before Constraint 修改列值
AIR 触发器: After Constraint 拒绝事务, 其它动作
行级触发器
----------
create or replace trigger rowtrigger
[before|after] [insert [or] update [OF Column1,Column2] [or] delete] on t
for each row
[WHEN (exprssion)]
declare
...
begin
...
end rowtrigger;
触发器属性
:NEW 新值
:OLD 原值
inserting 插入
updating 更新
deleting 删除
语句级触发器
------------
create or replace trigger stmttrigger
[before|after] [insert [or] update [or] delete] on t
declare
...
begin
...
end stmttrigger;
-------------------
-- 包与包体
-- 存储过程
-- 设置输出缓冲
SET SERVEROUTPUT ON SIZE 1000000;
-- 编译存储过程
alter procedure procedure_name compile;
-- 执行存储过程
exec plsql_template('100000');
-- 查看错误
SHOW ERRORS
SHOW ERROR procedure plsql_template;
-- 函数
-- 变量
-- 游标
-- 静态游标: 声明时绑定查询语句
-- 动态游标 : 打开时绑定查询语句
-- 强限制返回类型
-- 弱限制返回类型
-- type trec is record(...);
-- type dcursor is ref cursor return trec;
-- dcur dcursor;
-- rec trec;
-- open dcur for select * from t;
-- fetch dcur into rec;
-- while dcur%found loop
-- ...
-- fetch dcur into rec;
-- end loop;
-- 显式游标
-- declare
-- open
-- fetch
-- close
-- 隐式游标
-- dml sql%rowcount
-- for
-- 参数游标
-- 无参数游标
-- 游标属性
-- %FOUND:变量最后从游标中获取记录的时候,在结果集中找到了记录。
-- %NOTFOUND:变量最后从游标中获取记录的时候,在结果集中没有找到记录。
-- %ROWCOUNT:当前时刻已经从游标中获取的记录数量。
-- %ISOPEN:是否打开。
-- 使用游标更新变量
-- 行共享锁
cursor cursor_name(parameter_name datetype) is select_statement for update [of column_reference] [nowait];
-- 引用当前游标数据
update table_name set column = .. where current of cursor_name;
-- 控制结构
-- 条件
if condition then
expression
end if
if condition then
expression1
else
expression2
end if
if condition1 then
expression1
elsif condition2 then
expression2
else
expression3
end if
case variable
when value1 then expression1
when value2 then expression2
else expression3
end case;
-- 循环
loop
exit when condition;
...
end loop;
while condition loop
...
end loop;
for variable in [reverse] lower .. upper loop
...
end loop;
-- 嵌套循环
-- 标记法
<<outer>>
for i in 1..100 loop
<<inner>>
for j in 1..100 loop
...
exit outer when result=1000;
exit when result=500;
end loop inner;
end loop outer;
-- 类型
-- record 一行多列
-- ref cursor 游标指针
-- 集合
-- table 多行单列 BINARY_INTEGER | PLS_INTEGER
-- first
-- firor
-- next
-- last
-- count
-- exists
-- delete
-- nested table 子表 无元素个数限制 下标从1开始
-- varray 多行单列 数组 有元素个数限制 下标从1开始 需要使用构造函数创建类据
-- first
-- firor
-- next
-- last
-- count
-- exists
-- limit
-- extend
-- trim
-- 组合
-- 记录表 多行多列
-- 多维数组 多行多列
-- 批量处理
-- bulk collect
-- select
-- select * bulk collect into record_table from t;
-- dml
-- delete from emp where deptno=&no;
-- returning ename bulk collect into ename_table;
-- fetch
-- fetch cur bulk collect into t [limit 100];
-- for all
-- for all i in 1..10000
-- sqlstmt;
--
-- 过滤空值
-- for all i in indeces of collection
-- sqlstmt;
-- 批量属性
-- sql%bulk_rowcount 取得在执行批量绑定操作时第i个元素所作用的行数
-- 绑定变量
-- &绑定变量名
-- 调用时绑定变量的使用
-- sql: var name varchar2(20);
-- exec procedure_name(:name);
-- 存储过程语法规则
-- 1 参数部分
-- 1. 参数默认为IN
-- 2. 没有参数列表时, 括号不用写
-- 3. 参数的类型不需要声明长度
-- 4. 参数IN为只读, 可以有默认值; 参数OUT/INOUT为可写, 不能有默认值
-- 5. 可以使用%TYPE, %ROWTYPE
-- 6. 格式: 参数 IN|OUT|INOUT 类型 默认值
-- 2 声明块
-- 1. 声明类型需要长度
-- 2. 可以使用%TYPE, %ROWTYPE
-- 3. 不需要写 declare
-- 4. 赋值不是=,而是:=
-- 5. 字符常量使用单引号 ''
-- 6. 语句块以;结束
-- 7. 不能使用保留字
-- 8. 变量可以有默认值
-- 9. 与JAVA相反先写变量后写类型
-- 10. 支持自治事务
-- 3 代码块
-- 1. 条件分支语句中是 elsif 不是 elseif
-- 2. :绑定变量
-- 3. &绑定变量占位符
-- 4. select * into v
-- 5. return 退出过程 exit 退出循环
-- 6. 静态SQL可以写DML, SELECT, TCL; 动态SQL还可以写 DDL, DCL
-- 7. 游标记得关闭, 多使用隐式游标
-- 8. 事务要记得提交或回滚
-- 9. 多使用批量
-- 10. 少使用动态SQL
-- 11. DML查询子句前没有AS
-- 12. 一定要做校验
-- 13. 一定要写注释
-- 4 异常块
-- 1. 自定义异常处理
-- 2. 记录异常日志(表)
-- 3. 回滚失败操作
-- 4. 清理
-- 5 涉及关键字
-- sql
select
select ... into
insert into
update
delete from
merge
-- dynamic sql
execute immediate
-- tcl
commit
rollback
savepoint
set transaction
-- dcl
grant
revoke
-- ddl
create
alter
drop
truncate
-- type
cursor
type
table
varray
nested table
record
ref cursor
object
-- cursor
open
open for
fetch ... into
close
-- batch
forall
bulk collect
-- other
&
:=
%ROWTYPE
%TYPE
%FOUND
%NOTFOUND
where current of cursor_name
exception when
exit when
return
goto
null
using
of
-- hints
/*+ append */
-- 触发器
行级触发器: 插入,更新,删除操作每一行触发一次.:NEW, :OLD有效,有WHEN子句.
语句级触发器: 插入,更新,删除操作每条SQL触发一次.:NEW, :OLD无效,没有WHEN子句.
系统级触发器: 系统事件触发.
行级更新触发器: 更新可指定列操作触发, 语句级不可指定可指定列.
BIR 触发器: Before Constraint 修改列值
AIR 触发器: After Constraint 拒绝事务, 其它动作
行级触发器
----------
create or replace trigger rowtrigger
[before|after] [insert [or] update [OF Column1,Column2] [or] delete] on t
for each row
[WHEN (exprssion)]
declare
...
begin
...
end rowtrigger;
触发器属性
:NEW 新值
:OLD 原值
inserting 插入
updating 更新
deleting 删除
语句级触发器
------------
create or replace trigger stmttrigger
[before|after] [insert [or] update [or] delete] on t
declare
...
begin
...
end stmttrigger;
发表评论
-
[oracle]LogMiner的使用
2013-09-29 22:42 1064LogMiner -- 01 功能: 版本: 8i ... -
[RMAN] Oracle11G 联机备份与恢复
2012-04-19 23:54 2564Oracle11G 联机备份与恢复 ------------- ... -
Oracle数据备份与恢复
2011-12-27 23:02 1239-- 创建用户 create user biso ... -
Oracle 基础
2011-09-09 11:23 1118Oracle 基础 ---------------- 1. ... -
Schema Export
2011-08-25 18:26 1097build.xml <?xml version ... -
MySQL JDBC Connector/J 5.x API
2011-08-23 23:49 1343MySql.java package cn.bisoft. ... -
数据库死锁问题
2011-08-04 02:52 1153数据库死锁: 锁分类: S 共享锁 U 更新锁 X 排它锁 ... -
HSQLDB 使用
2011-02-19 23:46 19181. 服务器模式 应用场景: 数据库服务器 应用步骤: ... -
Oracle 连接
2011-01-20 03:04 1201Oracle 连接 1. 连接 -- 查询当前用户 ... -
Oracle 存储过程示例
2011-01-20 02:59 1073Oracle 存储过程示例 1. S ... -
Oralce 锁机制
2011-01-14 19:09 1332Oracle DML 锁类型 1. exclusive 排它锁 ... -
ORACLE 1722 错误案例分析
2010-08-22 02:55 2346-- ORACLE 1722 错误案例分析 -- 1 ... -
ORACLE 查询Oracle错误码
2010-08-06 05:31 21531.创建一个表存储错误码 SQL> create ... -
[PDF]PLSQL Developer v7.0 用户指南中文版
2010-08-01 22:51 1423使用PLSQL Developer 工具必不能少的一本 ... -
Oracle 11g 开发指南学习笔记一
2010-06-21 00:59 1480基本概念: 1. 关系数据 ... -
hsqldb 源码剖析
2010-03-06 01:16 1997hsqldb,一个只有700多k的小型数据库. 内嵌支持JD ...
相关推荐
Oracle 存储过程基础知识 Oracle 存储过程是 Oracle 数据库中的一种程序单元,能够完成复杂的业务逻辑和数据操作。Oracle 存储过程的基础知识包括了解 Oracle 存储过程的基本语法、数据类型、变量声明、控制语句、...
Oracle存储过程基础培训 Oracle存储过程基础培训
oracle存储过程基础性资料,初学者的宝库
这个基础教程将带你深入理解Oracle存储过程的概念、创建、执行以及调用方法。 一、Oracle存储过程概述 Oracle存储过程是预编译的SQL和PL/SQL代码集合,它们在数据库中作为一个单元进行存储和管理。存储过程可以提高...
Oracle存储过程基础及优化,介绍Oracle存储过程的语法及事务处理、异常处理、性能优化等
#### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储过程的一些关键知识点的深入解析...
### Oracle存储过程基础语法详解及注意事项 #### 一、Oracle存储过程概述 Oracle存储过程是一种在Oracle数据库中存储的一段可执行的SQL代码或PL/SQL代码,它可以帮助开发人员实现复杂的业务逻辑处理,提高应用程序...
第二章 oracle存储过程基础――PL/SQL 9 2.1 pl/sql基础 9 2.1.1 PL/SQL简介 9 2.1.2 一个简单的PL/SQL块 10 2.1.3 PL/SQL流程控制 13 2.2 游标(CURSOR) 17 2.2.1 游标的概念 18 2.2.2 游标的属性 18 2.2.3 游标中...
这篇教程将深入讲解Oracle存储过程的各个方面,帮助你从基础到高级全面掌握这一技能。 一、存储过程的基本概念 存储过程是Oracle数据库中的一组有序的PL/SQL语句,可以包含变量声明、条件判断、循环结构以及SQL操作...
Oracle 存储过程基础知识包括了解 Oracle 存储过程的基本语法和结构。Oracle 存储过程的基本语法包括 PROCEDURE、FUNCTION 和 PACKAGE 等。PROCEDURE 是最基本的存储过程单元,FUNCTION 是带返回值的存储过程,而 ...
这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...
Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL和PL/SQL语句,形成一个可重复使用的程序单元。这个“Oracle存储过程案例”提供了丰富的学习材料,帮助用户从入门到精通掌握...
**Oracle存储过程基础知识** Oracle存储过程是由一系列SQL和PL/SQL语句组成的程序单元,它可以在数据库服务器端执行。存储过程可以接受输入参数,返回输出结果,甚至处理异常。它们被编译一次,然后存储在数据库中,...
### Oracle 存储过程基础知识 存储过程是由一系列SQL和PL/SQL语句组成的,它们在数据库服务器上执行。通过定义参数,存储过程可以接受输入值,处理这些值,然后返回结果。这使得存储过程成为实现商业逻辑的理想选择...
#### 二、Oracle存储过程的基础知识 - **创建与执行**: - 创建存储过程需要`CREATE PROCEDURE`系统权限。 - 如果存储过程需要被其他用户模式下的程序使用,则需要`CREATE ANY PROCEDURE`权限。 - 执行存储过程...
一、Oracle存储过程基础 1. 存储过程的概念:存储过程是一组预先编译的SQL语句,存储在数据库服务器中,当需要时可以被调用执行。它提高了数据库的性能,因为编译只需进行一次,后续调用无需重复编译。 2. PL/SQL:...
创建存储过程是 Oracle 存储过程的基础,使用 create or replace procedure 语句可以创建一个新的存储过程。例如: ```sql create or replace procedure test(var_name_1 in type, var_name_2 out type) as begin -...
1. **Oracle存储过程基础知识** - 存储过程是一组为了完成特定功能的SQL和PL/SQL语句集合,它们被预先编译并存储在数据库中。 - 存储过程可以接受参数,以便在执行时传递不同的输入值,同时也可以返回结果或影响...
本文将详细介绍如何使用C#语言连接Oracle数据库,并演示如何调用Oracle存储过程,特别是带有输出参数的情况。这些知识点对于初学者来说尤为重要。 #### 前置知识 1. **C#基础**:理解C#的基本语法和概念。 2. **...