数据库-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
原创粉丝点击