ORACLE中如何为存储过程传递参数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE中如何为存储过程传递参数?相关的知识,希望对你有一定的参考价值。
参考技术A第一种:只读。参数是只读的,不能修改,即调用时传递进来的是常量,或者变量(但变量不能在存储过程中修改)。通常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 存储过程中如何用ROWID
参考技术A 1一般说来,ROWID不是普通的字符串,所以,在与字符比较或做其它运算的时候,需要做转换.
即:
ROWIDTOCHAR
(x.ROWID)
or
CHARTOROWID(xxxxxxx)
这样转换过后,应当能解决你面临的问题.
2
剔重的过程一般要根据实际情况来做.
比如有完全相同的记录,有按条件相同的记录(不完全相同),有固定重复次数的情况,有不是固定重复次数的情况...根据不同的情况,可以采用相应的简便办法.
当然,你可以编制统一的剔重过程,就一劳永逸了.流程也很简单,按照你"关心"的条件进行排序,开游标去一条一条的取,第一条和第二条比,按条件相同,删除其中一条,比如删除第二条,那就还用第一条去和第三条比,..直到不同,再用这条不同的和它相临的下一条比,再比到不同....
如果是完全相同的情况.....
按全表所有字段分组,取每组最大或最小的....将此查询建立成新表即可..
以上是关于ORACLE中如何为存储过程传递参数?的主要内容,如果未能解决你的问题,请参考以下文章
oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)