日期:2014-05-16  浏览次数:20497 次

oracle 存储过程的参数理解

-- 输出参数不可以修改 解决的方法有两种
?? --1 把参数改成 输入参数??
?? --2 就是参数改成 可输入输出的参数;
? 调用过程的 三个方式
??????? 1 就是使用call
???????????? 在只用call方式调用函数的时候,必须加要括号,有参数,还要加参数值
???????????? 这个方式在命令窗口,调用过程,将不会出现输入的数据.
??????? 2 就是使用exec 命令,进行命令调用过程, 使用命令,就必须在命令行里面输入
????????? 过程名,这个命令窗口中,可加可不加() ,如果有参数的,就一定要加,还有参数值,参数值的类型要与
????????? 变量类型相同.
??????? 3 在语句块中进行调用过程,这个方式和命令模式类似,他们都是可要可不要(),
??????? -- 在2 和 3 中的 没有括号的情况是,过程没有参数 ,如果有,就必须要有()

???????
?????????????????????????????
?? 输出参数的特点
??????? 1? 一个过程中,如果有输出参数(OUT 参数),在调用过程的使用,也要传入一个参数, 这个参数可以不用在调用的地方
??????? 进行赋值,就直接传入一个声明好的一个变量,用来接受存储过程中的输出参数的值(OUT 参数)
??????? 2? 输入参数 值不可以改变在过程中,

???????
?????????? 注意: 在存储过程中,他的参数类型不可以设置它的大小 ;????
?????????????? 例如;
?????????????????????????? CREATE OR REPLACE PROCEDURE hello(
?????????????????????????????? p_name IN VARCHAR2(12),
????????????????????????????????? p_age OUT NUMBER(10,2)
??????????????????????????????? )
?????????????????????????????? IS
????????????????????????????? BEGIN???????????
??????? 如果有输出参数就必须有有一个参数进行接收 ;

???????
???? CREATE OR REPLACE PROCEDURE hello(
??????????? p_name IN VARCHAR2,
??????????? p_age OUT emp.sal%TYPE?
???? )
???? IS
???? BEGIN
?????? SELECT emp.sal + 3131 INTO p_age FROM emp WHERE empno = 7788 ;
???????????????????????
??????????? dbms_output.put_line( p_age);
???? END ;
???? ---------? 块中调用方法
???? DECLARE
???????? v_nanme? varchar2(12);
???????? v_age NUMBER (12,2);
???? BEGIN
????????? hello (v_nanme,v_age);
??????????? dbms_output.put_line(v_age);
???? END? ;
????
???? -- 在这个过程中 传入的v_age 就是接受 存储过程输出参数的值 ;? 类似于Java的中的返回值

???? -- 理解 in out 参数
????
???? CREATE OR REPLACE PROCEDURE hello1 (
??????????? p_name IN OUT emp.ename%TYPE
???? )
???? IS
????
???? BEGIN
????????? --? SELECT emp.ename INTO p_name FROM emp ;
????????????? p_name:='a;sk , ' || p_name ;
?????????? END ;

??? --------------------------------------
????? DECLARE
???????? v_nanme? varchar2(12);
???? BEGIN???????
???????? v_nanme:='12312';
????????? hello1(v_nanme);
??????????? dbms_output.put_line(v_nanme);
???? END? ;
????
????
SELECT emp.sal FROM emp WHERE emp.empno = 7788 ;
?
?


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