oracle的学习历程 2017/9/1
来源:互联网 发布:java web访问日志记录 编辑:程序博客网 时间:2024/06/05 23:55
过程
创建过程:
(参数名 in / out type,
参数名 in / out type, ...
) is
begin
end 过程名; 参数中IN是表示输入,out表示输出
举例子:
create or replace procedure pro_1( a invarchar2,b out varchar2)
is
str varchar2(100);
begin
str:='Your input is '||a;
b:=str;
dbms_output.put_line(b);
end;
调用过程
上面的函数可以这样使用:EXECUTE pro_1('S',b);
删除过程
修改过程
过程的参数类型以及传递
函数
语法如下: create or replace function function_name
(
参数名 [方式1] 数据类型1,
参数名2 [方式2] 数据类型2, ........
)
return 函数要返回的值
is|as
begin
end;
注意事项: 如果表达式类型与定义不相同的时候,白哦大师可以被转换成函数定义子句return中指定的类型。同时,控制将立即返回调用环境。
执行
var v1 varchar2(100)
exec :v1:=function_name
也可以在程序中调用函数
declare
m number;
f number;
begin
m:=count('m');
end;
删除函数:
create or replace function get_sal(empnamein varchar2) return number is
Result number;
begin
select sal into Result from emp where ename=empname;
return(Result);
end get_sal;
执行:
SQL> var sal number
SQL> exec :sal:=get_sal('scott');
程序包
用于将逻辑相关的pl/sql块或(变量、常量、自定义数据类型、异常、过程、函数、游标)等组织在一起,作为一个完整的单元存储在数据库中,来标识成程序包。类似于java中的类。其中变量相当于类中的成员变量,过程和函数相当于类的方法
基本原理
程序包有两个部分,一个是说明部分和包体部分,这两个部分都独立的存储在数据字典中。
说明部分是包与应用程序之间的接口,只是过程,函数,游标等名称或者首部。
包体才是这些过程、函数、游标的具体实现。
一般处理方法是:先独立的进行过程和函数的编写,待较为完善后,再逐渐按照逻辑相关性进行打包。
应该尽可能的减少说明部分。因为对包体的更新不会导致重新编译包的应用程序。而对说明部分的更新则需要重新编译每个调用包的应用程序。
创建包
1、包说明部分:
他是对包内所有的不见进行一个简单的说明,每个部件可以被外界应用程序访问,其中的过程,函数,变量,常量游标都是公共的。
创建格式:
create package 包名
is
变量,常量,以及数据类型定义;
游标定义头部;
函数、过程的定义和参数列表以及返回类型;
end 包名;
举个例子:
CREATE OR REPLACE
package p_stu
as
--定义结构体
type re_stu is record(
rname student.name%type,
rage student.age%type
);
--定义游标
type c_stu is ref cursor;
--定义函数
function numAdd(num1 number,num2 number)return number;
--定义过程
procedure GetStuList(cid in varchar2,c_st out c_stu);
end;
包体部分:
create package body 包名
as
游标、函数、过程的具体定义;
end 包名;
举个例子:
CREATE package body p_stu
as
--游标和结构体,包规范中已声明,包体中不用再声明,直接使用。
--实现方法
function numAdd(num1 number,num2 number)return number
as
num number;
begin
num:=num1+num2;
return num;
end;
--实现过程
procedure GetStuList(cid varchar2,c_st out c_stu)
as
r_stu re_stu; --直接使用包规范中的结构
begin
open c_st for select name,age from student where classid=cid;
-- 如果已经在过程中遍历了游标,在使用这个过程的块中,将没有值。
-- loop
-- fetch c_st into r_stu;
-- exit when c_st%notfound;
-- dbms_output.put_line('姓名='||r_stu.rname);
-- end loop;
end;
end;
调用包:
方式:包名.变量名(常量名)【游标名】【函数名】【过程名】
举个例子:
SQL> var sal number
SQL> exec :sal:=my_package.F_count_num('M');
删除包
drop package 包名
create or replace package 已存在的包名
- oracle的学习历程 2017/9/1
- oracle的学习历程 2017/9/2
- oracle的学习历程 2017/8/30
- oracle的学习历程 2017/8/31
- oracle学习历程 2017/8/20
- oracle学习历程 2017/8/21
- oracle学习历程 2017/8/22
- oracle学习历程 2017/8/29
- TypeScript的学习历程1
- oracle的安装历程...
- 我的J2ME学习历程1
- 我学习理解的c++历程(1)
- jsp的学习历程 v0.1
- 关于Uiautomator的学习历程(1)
- 我的大数据学习历程(1)
- Ogre 学习的历程
- 我的学习历程
- spring的学习历程
- 平面列表-LintCode
- The quadratic hash method when the table size is a power of 2
- 网易2017年校招部分笔试题
- phpstorm2017 安装和破解
- MySQL索引详解
- oracle的学习历程 2017/9/1
- vue之路之--Vue组件
- 看板和项目缺陷管理
- HDU5391 Zball in Tina Town 威尔逊定理
- 2017年终总结
- layui 表单验证案例文本框,手机,邮箱,textarea等格式的验证 <script src="layui/layui.js"></script> <script src="layui/lay
- 单链表模板类 link.h
- Effective<1>——让自己习惯c++
- JavaScript中的冷知识(持续更新中……)