oracle 存储过程in out inout三种参数模式和PROMPT用法
来源:互联网 发布:智能手机看书软件 编辑:程序博客网 时间:2024/06/06 05:04
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
v_LocalVariable := p_InParameter; -- Legal
p_InParameter := 7; -- Illegal
p_OutParameter := 7; -- Legal
v_LocalVariable := p_outParameter; -- Illegal
v_LocalVariable := p_InOutParameter; -- Legal
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
in
create or replace procedure update_price(
p_product_id in NUMBER,
p_factor in NUMBER)
AS
.....
exexute update_price(2,2.5);
out
in out
out
in
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
p_cursor
--------------------------------------------------------------------------------------------------------------------
oracle
create [or replace] procedure procedure_name
[ (argment [ { in| in out }] type,
argment [ { in | out | in out } ] type
{ is | as }
<
(
Begin
<
exception
<
end;
l
l
l
l
CREATE OR REPLACE PROCEDURE ModeTest (
p_InParameter IN NUMBER,
p_OutParameter OUT NUMBER,
p_InOutParameter IN OUT NUMBER) IS
v_LocalVariable NUMBER;
BEGIN
v_LocalVariable := p_InParameter; -- Legal
p_InParameter := 7; -- Illegal
p_OutParameter := 7; -- Legal
v_LocalVariable := p_outParameter; -- Illegal
v_LocalVariable := p_InOutParameter; -- Legal
p_InOutParameter := 7; -- Legal
END ModeTest;
/
§16.2.2
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
0 0
- oracle 存储过程in out inout三种参数模式和PROMPT用法
- oracle 存储过程in out inout三种参数模式
- oracle 存储过程in out inout三种参数模式
- Oracle基础知识(二十二) - 存储过程in out inout三种参数模式
- MySQL 存储过程参数用法 in, out, inout
- MySQL:MySQL 存储过程参数用法 in, out, inout
- MySQL 存储过程参数用法 in, out, inout(转)
- MySQL 存储过程参数用法 in, out, inout
- MySQL 存储过程参数用法 in, out, inout
- MySQL 存储过程参数用法 in, out, inout
- MySQL 存储过程参数用法 in, out, inout
- MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢?
- MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢?
- MySQL 存储过程传参之in, out, inout 参数用法
- MySQL存储过程传参之in,out,inout参数用法
- MySql(15)------mysql存储过程IN,OUT,INOUT参数模式使用详解
- mysql存储过程中参数的in,out,inout区别
- 【mysql】mysql存储过程in、out、inout参数使用
- Convolutional Neural Networks for Visual Recognition
- linux grep命令
- 如何修改ubuntu的密码
- 双向链表基础操作C++实现
- You must reset your password using ALTER USER statement before executing this statement.
- oracle 存储过程in out inout三种参数模式和PROMPT用法
- Java中java.lang.ClassNotFoundException: org.springframework.web异常
- 深度学习(二十八)基于多尺度深度网络的单幅图像深度估计-NIPS 2014
- java虚拟机总结
- IOS8 Spring Animation API 动画
- iOS之单例模式详解
- FlyBoys优化过程10.8-10.16
- jpa条件查询和分页
- AIDL 学习小结