There are three type of parameters of procedure,IN,OUT,IN OUT,here is the example:
create or replace procedure ModeTest(
p_InParameter in number,
p_OutParameter out number,
p_InOutParameter in out number
) is
v_LocalVariable number:=0;
begin
if(p_InParameter is null) then
dbms_output.put_line('p_InParameter is NULL');
else
dbms_output.put_line('p_InParameter = '||p_InParameter);
end if;
if(p_OutParameter is null) then
dbms_output.put_line('p_OutParameter is NULL');
else
dbms_output.put_line('p_OutParameter = '||p_OutParameter);
end if;
if(p_InOutParameter is null) then
dbms_output.put_line('p_InOutParameter is NULL');
else
dbms_output.put_line('p_InOutParameter = '||p_InOutParameter);
end if;
p_OutParameter := 4;
--p_InParameter := 9;illegal
p_InOutParameter := 9;
v_LocalVariable := p_InParameter;
dbms_output.put_line(to_char(v_LocalVariable));
v_LocalVariable := p_InOutParameter;
dbms_output.put_line(to_char(v_LocalVariable));
v_LocalVariable := p_OutParameter;
dbms_output.put_line(to_char(v_LocalVariable));
if(p_InParameter is null) then
dbms_output.put_line('p_InParameter is NULL');
else
dbms_output.put_line('p_InParameter = '||p_InParameter);
end if;
if(p_OutParameter is null) then
dbms_output.put_line('p_OutParameter is NULL');
else
dbms_output.put_line('p_OutParameter = '||p_OutParameter);
end if;
if(p_InOutParameter is null) then
dbms_output.put_line('p_InOutParameter is NULL');
else
dbms_output.put_line('p_InOutParameter = '||p_InOutParameter);
end if;
end ModeTest;
then test it:input 1,2,3 for testing,result is 1,4,9
log printed is:
Before assigned value:
p_InParameter = 1
p_OutParameter is NULL
p_InOutParameter = 3
After assigned value:
p_InParameter = 1
p_OutParameter = 4
p_InOutParameter = 9;
then the example of nocopy usage:
create or replace package CopyFast as
type StudentArray is table of students%rowtype;
--procedure with using pass-by-value
procedure PassStudents1(p_Parameter in StudentArray);
--procedure with using pass-by-reference
procedure PassStudents2(p_Parameter in out StudentArray);
--procedure with using pass-by-value
procedure PassStudents3(p_Parameter in out nocopy StudentArray);
--test procedure
procedure go;
end CopyFast;
create or replace package body CopyFast as
procedure PassStudents1(p_Parameter in StudentArray) is
begin
null;
end PassStudents1;
procedure PassStudents2(p_Parameter in out StudentArray) is
begin
null;
end PassStudents2;
procedure PassStudents3(p_Parameter in out nocopy StudentArray) is
begin
null;
end PassStudents3;
procedure go is
v_StudentArray StudentArray := StudentArray(NULL);
v_StudentRec students%rowtype;
v_Time1 number;
v_Time2 number;
v_Time3 number;
v_Time4 number;
begin
--Fill up the array with 50001 copies of Daivid Dinsmore's record
select * into v_StudentArray(1)
from students where id = 10007;
v_StudentArray.extend(50000,1);
--call each version of procedure PassStudents,and time them.
v_Time1 := dbms_utility.get_time;
PassStudents1(v_StudentArray);
v_Time2 := dbms_utility.get_time;
PassStudents2(v_StudentArray);
v_Time3 := dbms_utility.get_time;
PassStudents3(v_StudentArray);
v_Time4 := dbms_utility.get_time;
--output the results
dbms_output.put_line(to_char(v_Time3)||'=='||to_char(v_Time2));
dbms_output.put_line('Time to pass IN :'||to_char((v_Time2-v_Time1)/100));
dbms_output.put_line('Time to pass IN OUT:'||to_char((v_Time3-v_Time2)/100));
dbms_output.put_line('Time to pass IN OUT NOCOPY:'||to_char((v_Time4-v_Time3)/100));
end go;
end CopyFast;
then exec the procedure,result is:0,11,0
so we can use nocopy for change pass-by-value to pass-by-reference of parameter.
分享到:
相关推荐
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
标题“IMP-00010:不是有效的导出文件,头部验证失败”涉及的是Oracle数据库导入(IMP)过程中遇到的一个常见错误。这个错误通常发生在尝试使用IMP工具从.dmp文件导入数据时,表明导入文件可能已损坏或不完整,导致...
您可能感兴趣的文章:常用的Oracle doc命令(收藏)Oracle 多行记录合并/连接/聚合字符串的几种方法Oracle中字符串连接的实现方法php连接oracle数据库及查询数据的方法plsql连接oracle数据库报ora 12154错
PL / SQL解析器 欢迎捐款,我对每一个帮助都很满意:) 概念 这将是一个多阶段解析器。这意味着,第一级仅解析一般结构。例如,它发现变量声明,但不检查定义的varchar2变量是否确实具有有效的字符串值。...
今天在项目中,使用Mybatis对oracle数据库进行操作的时候,报出ORA-00911: invalid character的错误,检查了一下SQL,发现都书写正确啊,复制到plsql上执行也都没问题,这什么原因呢? 注意:这里说的是用navicat...
ORA-12154:TNS:无法解析指定的连接标识符 ORA-12154:TNS:无监听程序 ...E:\PLSQL Developer(64)\instantclient_11_2 配置环境变量就是为了让PL/SQL Developer打开时加载到tnsnames.ora文件的内容 配置pl/sql的Datab
标题 "plsql-vf-dbfodbc.rar" 暗示了这个压缩包与PL/SQL(Oracle数据库的编程环境)以及Visual FoxPro(VFP)数据库系统有关,特别是涉及到在PL/SQL环境中通过ODBC(Open Database Connectivity)驱动程序访问DBF...
- 子程序:函数(FUNCTION)和过程(PROCEDURE),用于封装代码逻辑。 - 异常处理:通过`EXCEPTION`关键字定义异常处理逻辑,例如`WHEN OTHERS THEN`可以捕获所有未明确处理的异常。 2. PL/SQL常用算法: - 排序...
此工具的主要功能有:绿色,已破解,中文操作文档,附加dbatools插件(可用于扩展数据库表空间等,此功能经常使用,完全可保证),是学习oracle进行提高的必备工具,希望对学习oracle数据的朋友有所帮助。
plsqldev-trivadis-插件 Trivadis PL / SQL Cop的PL / SQL开发人员插件 如果您的PL / SQL Developer是x86,则需要将插件编译为x86,或者如果它是x64,则编译为x64。 您需要将插件放置在C:\ Program Files \ PLSQL ...
oracle中表空间、权限、角色、用户的总结,其中包括表空间的建立,权限的配置,角色的生成和用户的挂接
- 创建:`CREATE OR REPLACE PROCEDURE proc_name (p1 IN datatype, p2 OUT datatype) IS BEGIN ... END;` - 调用:`EXECUTE proc_name(value1, value2);` - **函数**: 可以有输入参数,且有一个返回值。 - 创建...
plsqldev-9.0.zip
PLSQL Developer-dba
创建存储过程使用CREATE PROCEDURE语句,可以带有参数,返回值,甚至包含事务控制。执行存储过程使用EXECUTE或CALL语句。存储过程可以用于实现复杂的业务逻辑,或者封装数据库操作,减少网络通信。 3. **关于PLSQL...
plsqldev-12.汉化版 Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz Serial Number:601769 password:xs374ca
在数据库编程领域,TSQL(Transact-SQL)和PLSQL(Procedural Language/SQL)是两种广泛使用的SQL方言,分别由微软的SQL Server和甲骨文的Oracle数据库系统支持。它们都提供了丰富的数学函数和操作来处理数值计算,...
PLSQL Developer是一款强大的Oracle数据库管理工具,主要用于编写、调试、执行和管理PL/SQL代码。这个"plsql1504-x64"安装包是针对64位操作系统的版本,1504可能指的是软件的特定版本号,通常包含了各种性能改进和新...
PLSQL单元测试 该gem旨在用于测试PLSQL代码。 大多数测试框架是由Test :: Unit提供的,而这个gem仅添加了一些方便的方法,这些方法在单元测试PLSQL代码时非常有用。 依存关系 此宝石取决于: 为Oracle提供JDBC接口 ...
PLSQL,全称为Procedural Language/SQL,是Oracle数据库附带的一种编程语言,它将SQL语句嵌入到一种过程式的语言中,使得开发者能够更有效地管理和操作Oracle数据库。这个"PLSQL10-GGS(20131030).zip"文件是一个绿色...