ORACLE中如何为存储过程传递参数?

如题所述

第一种:只读。参数是只读的,不能修改,即调用时传递进来的是常量,或者变量(但变量不能在存储过程中修改)。通常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;

相似回答