数据库-Oracle-plsql(二)
来源:互联网 发布:anaconda linux的安装 编辑:程序博客网 时间:2024/06/16 12:49
-----------------------目录-----------------------
一、数据类型
二、一些常用语法
三、控制语句及例子
四、游标
五、函数和存储过程
六、包的创建和调用
-------------------------------------------------
五、函数和存储过程
1、函数
1)可以被调用;
2)必须有返回值;
3)可以传递出参,入参;
4) 定义关键字 function;
例子:
create or replace function get_user_info(v_id number) return varchar2 is v_name varchar2(30);begin select client_name into v_name from client where client_id = v_id; return v_name;end;
函数调用:
declare v_name varchar(30); v_id number := 1;begin v_name := get_user_info(v_id); dbms_output.put_line(v_id||'->'||v_name);end;说明:就这几句话,偶还调了好一会
>>函数声明时参数类型不要指明长度;
>>函数声明返回值定义时要指定长度;
>>函数一定要return
>>dbms_output.put_line 输出多个子串用||分隔
2、存储过程
1)可以被执行;
2)没有返回值;
3)可以传递出参,入参;
4) 定义关键字 procedure;
例子:
create or replace procedure p_get_user_info(v_id in number,v_name out varchar2,v_bno out number)asbegin select client_name,b_no into v_name,v_bno from client where client_id = v_id;end;
过程调用:
declare v_name varchar2(30); v_bno number(5); v_id number(9) := 1;begin p_get_user_info(v_id, v_name, v_bno); dbms_output.put_line('user '||v_name||' bno '||v_bno);end;
特别说明:pl sql 客户端创建函数或过程,写好了要执行以下,才能生成对象,提供给后面调用,我把函数定义和调用两个块放一个地方,执行后,调用那部分也被当成函数的一部分了,这里还是要分开执行啊,好吧。
六、包的创建和调用
step1:声明包
create or replace package pack_test_wris callcount number(5) := 0; function get_user_info(v_id number)return varchar2; procedure p_get_user_info(v_id in number, v_name out varchar2, v_bno out number);end;说明:包里可以定义私有变量,函数,过程,这里声明完了,在plsql客户端里执行以下,在会生成定义的对象;
step2:定义包体
create or replace package body pack_test_wris procedure p_get_user_info(v_id in number, v_name out varchar2, v_bno out number) as begin select client_name,b_no into v_name,v_bno from client where client_id = v_id; callcount := callcount+1; end p_get_user_info; function get_user_info(v_id number)return varchar2 is v_name varchar2(30); begin select client_name into v_name from client where client_id = v_id; callcount := callcount+1; return v_name; end get_user_info;end pack_test_wr;说明:这里定义了包体,包里的函数也在包体里定义,但是函数不要加create or replace
step3:调用包
declare v_name varchar(30); v_id number(10) := 3001055; v_bno number(10);begin v_name := pack_test_wr.get_user_info(v_id); dbms_output.put_line('callcount->'||pack_test_wr.callcount||' func:v_name->'||v_name); pack_test_wr.p_get_user_info(v_id, v_name, v_bno); dbms_output.put_line('callcount->'||pack_test_wr.callcount||' proc:v_name->'||v_name||' v_bno->'||v_bno);end;
0 0
- 数据库-Oracle-plsql(二)
- 数据库-Oracle-plsql(一)
- 数据库-Oracle-plsql(三)
- oracle PLSQL 学习二
- PLSQL连接oracle数据库
- PLSQL ORACLE 数据库解锁
- plsql连接oracle数据库
- Oracle数据库(十)PLSQL
- PLSQL连接oracle数据库
- Oracle PLSQL 学习笔记二
- plsql developer连接oracle数据库
- Plsql连接服务器端Oracle数据库
- PLSQL连接远程oracle数据库
- 怎样用PLSQL连接Oracle数据库
- plsql导入导出oracle数据库
- PLSQL连接oracle数据库配置
- Oracle数据库培训-PLSQL编程
- 用PLsql连接oracle数据库
- Objective-C语法之代码块(block)的使用
- 在 SharePoint Foundation 2010 中使用事件接收器
- http://bbs.csdn.net/topics/320159639
- Objective-C语法之Category的使用
- 慎用sscanf、swscanf
- 数据库-Oracle-plsql(二)
- Redis的存储
- 也许没你那么铁的朋友
- oracle数据导入导出(本地/远程)
- svn图标不显示的解决办法
- 分词学习(1)--正向最大匹配分词
- 等比例缩放图片
- 关于用ajax 乱码的问题的解决;
- Objective-C语法之KVO的使用