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
 ASIS 后声明要用到的量名称和型及度; 
l
 ASIS 后声明量不要加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  
0 0