第一种:只读。参数是只读的,不能修改,即调用时传递进来的是常量,或者变量(但变量不能在存储过程中修改)。通常select及DML类型的存储过程传递的是in类型的参数。
第二种:只写。忽略调用语句传递的任何参数,并在函数(过程)内部给这些参数赋值,因此是只写的。(这种情况是在函数或过程内部给参数重新赋值,但重新赋值后的参数是无法被外部调用的(好像游标类型的参数除外))
CREATE OR REPLACE PROCEDURE "SCOTT"."SWAP" (firstValue out
number, secondValue out number) is
temp number;
begin
temp := firstValue;
firstValue := secondValue;
secondValue := temp;
end swap;
外部调用:
set serveroutput on;
declare
firstVal number;
secondVal number;
begin
firstVal := 10;
secondVal := 20;
scott.swap(firstVal,secondVal);
dbms_output.put_line('first is ' || firstVal);
dbms_output.put_line('second is ' || secondVal);
end;
无法在外部访问到firstValue与secondValue的值。此时打印出的结果为:
first is
second is
第三种:读或写。这可以完全控制参数,读取传递的参数的值。可以再函数(过程)内部修改参数的值,在退出函数(过程)后,这些参数被赋给在函数内部写入的值,这样就可以返回多个值。(即入口参数写入值后,可以传递到函数(过程)的外部,供外部调用的时候使用)
ps:函数中的返回值为如下几种:
char; varchar2; number; integer; date; boolean; table; record
SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
8 p_out_val := 'A';
9 p_inout_val := 'B';
10 END HelloWorld2;
11 /
Procedure created.
SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10) := '~Hi~';
4 BEGIN
5 HelloWorld2('Edward', p_outval, p_inoutval);
6
7 dbms_output.put_line('p_outval=' || p_outval);
8 dbms_output.put_line('p_inoutval=' || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=B
PL/SQL procedure successfully completed.
oracle中调用存储过程时传递参数值的3种方式。。
1 , IN (参数值传过来给存储过程使用)2, OUT(存储过程返回结果给该参数)3. IN OUT(存储过程调用该参数的同时,最后还返回结果给调用的参数)
ORACLE中如何为存储过程传递参数
给你一个 传递参数的例子 SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (2 p_user_name IN VARCHAR2,3 p_out_val OUT VARCHAR2,4 p_inout_val IN OUT VARCHAR2 5 ) AS 6 BEGIN 7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');...
oracle存储过程的in out 值传递,这是怎么传递的??看不懂啊??
p_user_name的IN,表示这个参数是传入参数。p_out_val的OUT,表示这个是传出参数。也就是JAVA中return的值。p_inoutval的IN OUT,表示这个既是传入、又是传出参数。也就是说,你可以利用它传入该存储过程,然后接到处理后的这个参数。一个参数搞定了2项功能(传入,传出)...
oracle 存储过程,如何传入一个数组
这个是不行的,数组内容必须首先在存储过程里定义好数组类型,然后给予定义好的数据类型定义数组型变量。存储过程的入参是做不到的。一般情况下,采用字符串的方式,并给每项用特定的分隔符的方式传入,然后在存储过程中按照分隔符解析出每一项,插到存储过程的定义的数组的每一项上去。
oracle存储过程中怎么理解传入传出参数(in out)
in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。举个例子 create or replace procedure update_price(p_product_id in NUMBER,p_factor in NUMBER)AS ...你在引用这个过程的时候给参数传入值 exexute update_price(2,2.5);这是定义的2个参数就得到了值,i...
oracle 存储过程中in条件传参数
楼上的可以,不过有些语法错误,我改改,呵呵 --- create or replace procedure pd1(p_1 number,p_2 number,p_3 number)is v_sql varchar2(4000);begin v_sql:='select * from table where id in('||p_1||','||p_2||','||p_3||')';execute immediate v_sql;end;\/ ...
oracle中存储过程传入参数是一个int型,如何将其+1,然后在后面的操作中...
直接在代码中用啊,比如参数名为p_value,在你的代码中用p_value+1就行了,不管是条件比较的IF xxx=p_value+1,或者是给其它变量赋值xxx:=p_value+1,再或者插入数据时的insert into test(...) values(p_value+1,...)都可以。嫌麻烦的话,就声明一个本地变量,l_value number := p_...
oracle中,一个存储过程怎么调用另一个存储过程?这两个存储过程都带有...
原则就是:你要调用哪个存储过程,就要为该存储过程传入它需要的参数 它定义的几个,你就传入几个 当然参数的类型要对应上。还有就是如果一个存储过程中定义了out类型的参数,当你在调用它的时候,这个out类型的参数也要参入,看它定义的是什么类型的out参数。然后定义一个该类型的变量,传入进去,用于...
oracle存储过程中如何对一个变量累加赋值 最好有个例子
1、首先打开oracle数据库,如下图所示。2、在Oracle中,对于函数的变量赋值,通常有三种方法来进行处理,直接赋值的方法,可以在声明变量的时候直接给变量进行赋值。3、其次,可以使用SELECT语句对变量进行赋值,主要是SELECT INTO语句,如下代码示例,将变量v_minvar赋予Min(t.sal)的值。4、最后就是动态...
oracle 存储过程sql中in 参数怎么传入调试
右击存储过程,选择 测试create or replace procedure pd1(p_1 number,p_2 number,p_3 number)is v_sql varchar2(4000);begin v_sql:='select from table where id in('||p_1||','||p_2||','||p_3||')';execute immediate v_sql;end;