in out in/out 三种参数的区别

金仓数据库Oracle兼容模式:IN、OUT、INOUT参数模式详解与实战 在数据库编程中,存储过程和函数的参数传递是核心概念,它定义了数据在调用者与被调用程序单元之间的流动方式。其基本原理是通过参数模式(IN、OUT、INOUT)来控制数据的输入、输出或双向传递,这是实现模块化、封装业务逻辑的关键技术。理解并正确使用这些模式,对于编写高效、可维护的数据库程序至关重要,尤其在涉及复杂业务逻辑和性能优化的场景下。本文将聚焦于国产金仓数据库(KingbaseES)的Oracle兼容模式,深入解析这三种参数模式的具体实现、细微差异、常见陷阱及性能优化技巧,例如如何利用NOCOPY提示符处 阅读详情

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

Android AIDL参数中in、out、inout、oneway含义及区别 1、定义 in、out、inout表示跨进程通信中数据的流向(基本数据类型默认是in,非基本数据类型可以使用其它数据流向out、inout)。 in 表示数据只能由客户端流向服务端。(表现为服务端修改此参数,不会影响客户端的对象) out 表示数据只能由服务端流向客户端。(表现为服务端收到的参数是空对象,并且服务端修改对象后客户端会同步变动) inout 则表示数据可在服务端与客户端之间双向流通。(表现为服务端能接收到客户端传来的完整对象,并且服务端修改对象后客户端会同步变动) oneway... 阅读详情

相关推荐

oracle存储过程--参数类型研究(in,out,in out)

###########################in############################ create or replace procedure pro_eight(p_one in varchar2, p_two out varchar2,

1万+

C++之_In_和_out_

宏_In_,_out_,__in_opt,__out含义

懒雄熊的专栏 1万+

从零开始!在 Windows 上安装与配置 Dify

这篇博客将详细介绍如何在 Windows 系统上部署 Dify,适合零基础用户。从 Docker 和 WSL 的安装配置开始,逐步指导用户设置 Git、Docker 环境以及 Dify 配置文件,解决可能遇到的端口冲突等问题,最终完成 Dify 的启动和测试。通过简明易懂的步骤,帮助用户在本地成功运行 Dify,实现模型供应商配置,让 Dify 项目在 Windows 平台上顺利上线。

qq_49035156的博客 5万+

【MySQL】存储过程 —— 参数(IN, OUT, INOUT)

参数的类型,主要分为以下三种:IN、OUT、INOUT。

qq_39921135的博客 1057

图解说明JLink驱动与目标板电源匹配的关键细节

深入讲解JLink驱动安装及使用过程中,如何正确匹配目标板电源,避免常见通信故障。通过图解方式清晰展示关键连接细节,确保调试稳定可靠,是嵌入式开发中不可或缺的实战经验分享。

weixin_42173218的博客 431

基于smart_rtmp直播,最简单的部署手册

版本号 添加内容 修改时间 V1.0 新建 2021年12月30日 V1.1 增加网页播放 2021年12月31日 V1.2 增加是否可以多流和测试数据 2022年1月5日 目录 一、软件储备 1.推流软件:OBS 2.服务器流媒体软件:smart_rtmp 3.播放软件:Pot...

qq_28768477的博客 1万+

存储过程(无参,IN多个输入参数,OUT多个输出参数,INOUT输入输出)

存储过程(无参,多个输入参数,多个输出参数) 存储过程: 1、减少编译次数 2、简化操作 3、减少了变异次数减少了和数据库的链接次数,提高效率 关于存储过程的方法: 1、删除存储过程 DROP PROCEDURE 存储过程的名称; 2、查看存储过程信息 show create pro...

有一种信仰叫海阔天空 3万+

.NET适配HarmonyOS进展 1. 前言

目前国产化系统浪潮下,适配鸿蒙是中国软件大势所趋,.NET作为最适合开发客户端语言之一,适配鸿蒙系统(HarmonyOS Next)是目前.NET开发者最关心的事情。我目前业余时间正在移植Avalonia到HarmonyOS,去年在.NET Conf CN上分享过,目前又取得一点进展,所以本文把所有问题进行整合与大家进行分享。

2301_76476890的博客 1461

MySQL的存储过程——输入参数(in)、输出参数(out)、输入输出参数(inout)

目录 什么是存储过程? 特点 语法格式 局部变量 用户变量 系统变量 查看修改全局变量 查看修改会话变量 传入参数 输出参数 修改传入参数值 每文一语 什么是存储过程? MySQL 5.0 版本开始支持存储过程。 简单的说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;Python里面的函数; 存储过就是数据库 SQL 语言层面的代码封装与重用。 特点 有输入输出参数,可以声明变量,有if/else, case,w

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 1万+

抖音__NS_sig3签名机制解析与动态Hook实战

在现代移动应用中,客户端与服务端之间的可信通信契约往往依赖于动态生成的请求签名,如抖音(某手)的__NS_sig3参数。该签名并非简单哈希,而是融合设备指纹、传感器数据、运行时上下文与轻量加密的综合摘要,体现了‘环境即凭证’的安全设计思想。其核心价值在于抵御静态伪造与批量模拟,提升接口调用的真实性与不可复用性。典型应用场景包括Feed流加载、点赞关注等关键业务接口的身份校验。本文基于真实逆向与Frida动态Hook实践,深入解析__NS_sig3的so层实现逻辑、JNI调用链路、输入参数真实性验证机制,以及

weixin_30127995的博客 374

(2)NPW(监控片)【中】---业务场景精讲

自己在日常工作当中,由于非产线人员出生,对NPW的知识一直一知半解,业务场景认识的不够透彻,做系统的时候很难理解甲方的NPW业务应用,特收集了不少关于NPW的一些业务场景,下面都是一些摘抄,大家关注我标红标粗的部分,

阿拉伯梳子的专栏 1586

存储过程中 IN,OUT,INOUT类型参数的区别

IN 输入参数:表示该参数的值必须在调用存储过程时指定赋值,在存储过程中修改该参数的值不能被返回,为默认值 OUT 输出参数:该值可在存储过程内部被改变,并可返回 INOUT 输入输出参数:调用时必须指定具体值,并且可在存储过程体重被改变和在调用完毕后可被返回 ______________________________________________________________...

zy103118的博客 8787

【FISCO BCOS】二十、多机部署区块链

实际开发中,为了满足高可用性和高容错性的需求,往往会采用多级部署区块链的方式,今天介绍一下FISCO BCOS的多机部署流程。

naihe_fish的博客 3649

Oracle存储过程参数模式详解:IN、OUT、IN OUT的区别与实战

在Oracle数据库开发中,存储过程是PL/SQL编程的核心工具,而参数模式的选择直接决定了过程的可复用性和稳定性。IN、OUT、IN OUT三种模式分别对应数据流转的不同方向:IN用于传入只读条件,OUT负责返回结果,IN OUT则实现双向传递。理解其底层语义,有助于规避编译报错和运行时数据异常的陷阱。合理运用参数模式,能大幅提升代码的维护效率,尤其在报表统计、批量数据处理、计数器累加等典型场景中发挥关键作用。本文结合真实业务案例,详细拆解三种参数模式的行为差异、实参限制、异常处理以及外部程序调用方式,帮

weixin_30899023的博客 306

信奥赛C++提高组csp-s之线段树详解

信奥赛C++提高组csp-s之线段树详解

王老师青少年编程 925

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Creating a Stored Procedure or Function in an Oracle Database

An IN parameter is a parameter whose value is passed into astored procedure/function module. The value of an IN parameter is aconstant; it cant be changed or reassigned within the module. A

zhigangsun的专栏 847

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c# 方法参数与重载 18

在同一个类中,方法名完全相同,但是参数列表不一样,编译器可以根据传入实参的数量、类型、顺序自动匹配调用对应方法,就叫方法重载。同一个功能逻辑,适配多种传参形式,不用起多个不同方法名,简化调用。

Meshence的博客 225

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

KingbaseES存储过程实战:兼容模式、事务控制与批量调优

数据库存储过程是将业务逻辑下沉至数据库端执行的编程方式,通过预编译、流程控制和事务管理,显著降低应用与数据库间的网络交互开销。其技术价值在于支撑海量数据的批量处理与强一致性事务,广泛应用于银行核心系统迁移、国产数据库选型等场景。KingbaseES 提供 PostgreSQL、Oracle、MySQL 三种兼容模式,支持 PL/pgSQL、PL/SQL 等语言,但存储过程与函数在事务提交、参数模式上存在关键差异。围绕 KingbaseES 存储过程的语法细节、事务提交边界、异常处理与性能调优,结合实际踩坑经

weixin_29587015的博客 251

Oracle 存储过程的参数传递:IN / OUT / IN OUT 深度解析

Oracle 存储过程参数传递:IN/OUT/IN OUT 关键解析 核心摘要 Oracle 存储过程的参数传递模式(IN/OUT/IN OUT)不仅是语法差异,更是严格的编程契约: IN参数:单向输入,PL/SQL内只读不可修改,传递值拷贝 OUT参数:单向输出,强制要求过程内赋值,忽略调用方初始值 IN OUT参数:双向传递,既接受初始值又返回修改值 重点说明 OUT参数陷阱:过程内必须显式赋值,否则返回NULL,容易导致静默错误 IN参数优势:线程安全,天然防御性编程,适合传递查询条件等输入数据 IN

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

MySQL存储过程procudure中IN、INOUT、OUT三种类型的区别

r

MaYuKang的博客 1092

Oracle 存储过程 三种参数类型(in 、out、in out)总结

in、out、inout 传入指:直接向参数传入具体的值(in) 通过变量赋值(in,in out); 传出指:通过计算、程序块中赋值在传出一个新的结果值 out、 in out;

m0_58871547的博客 6491

PL/SQL参数模式详解:IN、OUT、IN OUT的区别与实战避坑指南

在数据库编程中,存储过程和函数是封装业务逻辑、提升代码复用性的核心技术。其参数传递机制,特别是参数模式,直接决定了数据如何进出子程序,是保证程序正确性和性能的基础。参数模式主要分为IN、OUT和IN OUT三种:IN模式用于输入,数据单向流入,默认按值传递;OUT模式用于输出,数据单向流出,按引用传递;IN OUT模式则支持双向数据流。理解其底层原理,能有效避免数据更新异常、返回值丢失等常见问题。在实际工程中,参数模式的选择需结合业务场景与性能考量,例如使用NOCOPY提示优化大数据集合的传递性能,同时需警

weixin_30616969的博客 348

C++实现参数in、out、ref语义

stl是一个好东西,但是一直唯一一点不爽的就是长长const std::string&,const std::vector<int>&的函数参数。 void test(const std::string& str, std::vector<int>& vec, std::vector<int>& outvec) { ...

hyzsg的专栏 5128

mysql存储过程中in、out、inout参数使用实际案例

1.参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去) //为了避免存储过程中分号(";")结束语句,我们使用分隔符告诉mysql解释器,该段命令是否已经结束了。 /** 案例功能:求1-n的和 开发者:徐守威 时间:2016-08-13 */ delimiter $ create procedure p1(in n int) begin declare to

徐守威 2万+

C#中ref、out、in的区别与使用

C#中ref、out、in的区别与使用

橙-极纪元-JJYCheng 3495

理解 C# 函数参数的修饰符 ref / out / in

C# 参数修饰符对比:ref、out、in ref、out和in是C#中用于控制参数传递方式的关键字,主要解决默认传值的局限性。 ref:双向传递变量引用,调用前需初始化,函数内可读写。用于需要修改外部变量的场景。 out:单向输出参数,调用前无需初始化,函数内必须赋值。常用于多返回值方法。 in:只读引用传递,调用前需初始化,函数内不可修改。适用于大型值类型的高效只读访问。 三者区别: 初始化要求:ref/in需初始化,out不需要 操作权限:ref可读写,out只写,in只读 典型用途:ref修改变量,

一杯小可的博客 1849
上一篇: Winform 中listBox 控件的数据源捆绑和选中值读取
下一篇: oracle sqlplus 常用命令大全
jackmtlee
博客等级 码龄24年 33粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackmtlee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值