Oracle存储过程prompt,oracle 存储过程in out inout三种参数形式和PROMPT用法

当前位置:我的异常网» 数据库 » oracle 存储过程in out inout三种参数形式和PROMPT

oracle 存储过程in out inout三种参数形式和PROMPT用法

www.myexceptions.net  网友分享于:2013-03-27  浏览:114次

oracle 存储过程in out inout三种参数模式和PROMPT用法

oracle 存储过程in out inout三种参数模式

oracle过程中定义了in|out|in out3中参数模式,每个参数可以选择其一

in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。

举个例子

create or replace procedure update_price(

p_product_id in NUMBER,

p_factor in NUMBER)

AS

.....

你在引用这个过程的时候给参数传入值

exexute update_price(2,2.5);

这是定义的2个参数就得到了值,in模式下值不能变

out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程

in out 表示高参数可以向该过程中传递值,也可以将某个值传出去

简单的说in参数就是传入但存储过程里面处理的参数

out参数就是返回值的参数。

in参数就像c++语言里函数一般的参数那样

而out函数就像c++里函数的引用类型参数一样

不知道我比喻是否正确,请高手指点

create or replace procedure gettest2(stdname in varchar2,p_cursor in out types.mytype)

as

begin

open p_cursor for select * from test where name=stdname;

end;

例如上面的存储过程

stdname是in参数,传进去供查询语句使用

p_cursor是 out参数,返回查询的结果集

--------------------------------------------

oracle 存储过程 in out2009-08-11 16:30

创建过程语法:

create [or replace] procedure procedure_name

[ (argment [ { in| in out }] type,

argment [ { in | out | in out } ] type

{ is | as }

( 注: 不用 declare 语句 )

Begin

exception

end;

l 这里的IN表示向存储过程传递参数,OUT表示从存储过程返回参数。而IN OUT 表示传递参数和返回参数;

l 在存储过程内的变量类型只能指定变量类型;不能指定长度;

l 在AS或IS 后声明要用到的变量名称和变量类型及长度;

l 在AS或IS 后声明变量不要加declare 语句。

例1.

CREATE OR REPLACE PROCEDURE ModeTest (

p_InParameter IN NUMBER,

p_OutParameter OUT NUMBER,

p_InOutParameter IN OUT NUMBER) IS

v_LocalVariable NUMBER;

BEGIN

/* 分配 p_InParameter 给 v_LocalVariable. */

v_LocalVariable := p_InParameter; -- Legal

/* 分配 7 给 p_InParameter. 这是非法的,因为声明是IN */

p_InParameter := 7; -- Illegal

/* 分配 7 给 p_InParameter. 这是合法的,因为声明是OUT */

p_OutParameter := 7; -- Legal

/* 分配 p_OutParameter 给 v_LocalVariable.这是非法的,因为声明是OUT */

v_LocalVariable := p_outParameter; -- Illegal

/* 分配 p_InOutParameter 给 v_LocalVariable. 这是合法的,因为声明是IN OUT */

v_LocalVariable := p_InOutParameter; -- Legal

/*分配 7 给 p_InOutParameter. 这是合法的,因为声明是IN OUT */

p_InOutParameter := 7; -- Legal

END ModeTest;

/

§16.2.2 使用过程

存储过程建立完成后,只要通过授权,用户就可以在SQLPLUS 、Oracle开发工具或第三方开发工具来调用运行。Oracle 使用EXECUTE 语句来实现对存储过程的调用。

EXEC[UTE] procedure_name( parameter1, parameter2…);

例:

CREATE PACKAGE emp_data AS

TYPE EmpRecTyp IS RECORD (

emp_id NUMBER(4),

emp_name VARCHAR2(10),

job_title VARCHAR2(9),

dept_name VARCHAR2(14),

dept_loc VARCHAR2(13));

TYPE EmpCurTyp IS REF CURSOR RETURN EmpRecTyp;

PROCEDURE get_staff (

dept_no IN NUMBER,

emp_cv IN OUT EmpCurTyp);

END;

/

CREATE PACKAGE BODY emp_data AS

PROCEDURE get_staff (

dept_no IN NUMBER,

emp_cv IN OUT EmpCurTyp) IS

BEGIN

OPEN emp_cv FOR

SELECT empno, ename, job, dname, loc FROM emp, dept

WHERE emp.deptno = dept_no AND emp.deptno = dept.deptno

ORDER BY empno;

END;

END;

/

COLUMN EMPNO HEADING Number

COLUMN ENAME HEADING Name

COLUMN JOB HEADING JobTitle

COLUMN DNAME HEADING Department

COLUMN LOC HEADING Location

SET AUTOPRINT ON

VARIABLE cv REFCURSOR

EXECUTE emp_data.get_staff(20, :cv)

-----------------------------------

PROMPT

oracle 用 prompt实现打印功能,多用于提示信息。输入命令prompt tablename1;

标准输出为tablename1

PROMPT 告诉SQL*Plus 在屏幕上书写一行文字。你在这里使用了两个PROMPT命令;每个命令都在屏幕上打印一个空行,这对于垂直间距很有好处。ACCEPT命令是等待用户输入一个置换变量的值。ACCEPT命令中可选的PROMPT 子句在用户输入数值的同一行中显示了一条信息。你在PL/SQL 块的外面放置PROMPT 和 ACCEPT 是正确的:他们是SQL*Plus 命令,不是PL/SQL 。

我的异常网推荐解决方案:oracle存储过程,http://www.myexceptions.net/oracle-develop/177537.html

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值