oracle数据库对象--存储函数和存储过程

Oracle 存储过程的返回值 存储过程是 Oracle 数据库中的一种可重复使用的数据库对象,它可以接收输入参数并执行一系列的 SQL 语句和逻辑操作。在存储过程的执行过程中,有时我们需要从存储过程中返回一个或多个值给调用者。本文将详细介绍在 Oracle 中如何使用存储过程返回值,并提供相应的源代码示例。在 Oracle 中,存储过程可以使用 OUT 或 IN OUT 参数来返回值给调用者。此外,还可以使用存储过程的返回语言来返回单一的结果。除了使用 OUT 参数返回值以外,我们还可以使用存储过程的返回语句来返回一个单一的结果。 阅读详情

存储过程(PROCEDURE),存储函数(FUNCTION)

通过之前两篇文章对pl/sql程序的简单介绍,现在就可以稳稳的学习重点了,存储过程和存储函数,这个才是我们项目开发中真正要用到的,前面所学的都是为了这个做铺垫的。

1.什么是存储过程和存储函数?

oracle允许将pl/sql程序块存储在数据库中,并在任何地方可以调用他,这样的程序块我们就成为存储过程或存储函数,过程和函数是pl/sql子程序,他们是被命名的程序块,均存储在数据库中,他们可以通过输入输出参数与调用者产生交互,过程和函数的唯一区别就是过程不向调用者返回数据而函数总是需要向调用者返回数据。
因为过程和函数是存储数据库中的,所以他们也是oracle数据库对象。

2.如何定义和维护一个存储函数?

(1)定义存储函数

//创建一个存储函数
CREATE [OR REPLACE] FUNCTION function_name[(param [in | out]type ,param1[in| out]type)] 
 //可能是有参数的
RETURN TYPE;//返回结果类型
IS | AS
<返回变量>
begin
方法执行体;
end;

其中OR REPLACE 代表是否替换之前的, 在参数名和类型之间我们有时候会添加 in,或者是out,或者是in out 关键字,
通过这些关键字修饰,我们来保证实参传进来是否会因为形参的改变而发生变化,如果使用out 和in out 则代表会发生变化
如果使用 in关键字则代表不会发生变化,默认是in,后面将通过实例来说明这个问题。

eg:创建一个返回当前时间的存储函数

create or replace function getSysdate   //无参函数
return Date;
is
v_date date;
begin
select sysdate into v_date from dual;
return v_date;
end;

//执行该函数
declare
v_date date;
begin
v_date := getSysdate();
dbms_output.put_line(v_date);
end;

eg:获取某部门工资总和 和部门总人数

create or replace function get_salary(dep_id employees.department_id%type,emp_count out number)
//emp_count采用的 out修饰 即为输出函数,后文注释介绍为什么要这样。
return number;
is
v_sumsal number;
begin
select sum(salary),count(*) into v_sumsal ,emp_count from employees where department_id = dep_id;
 return v_sumsal;
end;

//执行实例二
declare
v_sum employees.salary%type;
v_count number(5);
begin
v_sum := get_salary(30,v_count);
dbms_output.put_line(v_sum||','|v_count|);
end;

总结:
(1)实例二是带有参数的存储函数,参数是分为输出(OUT修饰)参数和输入(IN 修饰)参数,pl/sql,我们把函数内自己
定义参数成为形式参数,而我们调用时传入的参数成为实际参数,oracle中,调用函数时,对于输出参数(out修饰),实际
参数会把自己的值复制一份给形式参数,然后形式参数发生操作,当函数顺利退出时又会将形式参数的值赋值给实际参数,
而对于输入(in修饰)参数就不行了,所以本题中,我们调用时传入了v_count实参,当函数结束后,发现实参的值改变了,
也是我们所需要的值。

所以一般当我们返回数据要求是多个数据类型时,我们都是通过定义输出参数,然后通过形式参数赋值给实际参数的方式,来
得到我们需要的实际参数,最终获得我们锁需要的结果。

(2)一般我们在传递参数的时候可以设置默认值,但是规定是只能给输入参数设置默认值,输出参数(out)或输入输出参数
不可以设置默认值
(3)一般参数不写修饰就是默认 in, 然后out 和 in out 表达可以理解成一个意思。
(4)我们在调用函数的时候,传入参数的时候,可以有多种方式
    第一种就是例题中那样,参数位置一一对应
    v_sum := get_salary(30,v_count);
    第二种就是使用名称表示法
    v_sum := get_salary(emp_count => v_count,dep_id =>80); //这样就与参数位置无关
    第三种就是混合表示法
    v_sum := get_salary(30,emp_count =>v_count);

(2)删除存储函数
格式:
DROP FUNCTION [user.] function_name;


3.如何定义和维护一个存储过程

之前已经介绍了,其实过程和函数本身区别并不大,过程是没有返回数据的。
在oracle server上建立存储过程,可以被多个应用程序调用,可以向存储过程中传递参数,也可以向存储过程中传回参数。

(1)定义存储过程

//创建一个存储函数
CREATE [OR REPLACE] PROCEDURE procedure_name [(param [in | out]type ,param1[in| out]type)]
//可能是有参数的
IS | AS
<类型 变量的说明>
begin
方法执行体;
exctption
捕获异常;
end;

//删除指定员工的信息
create procedure or replace del_pro (emp_id employees.employees_id%type)
is
no_data exception;
begin
delete from employees where employee_id =emp_id;
if sql%notfound then 
raise no_data;
end if;
dbms_output.put_line('编号为:'||emp_id||'的用户已经删除');
exception
when no_data then dbms_output.put_line('暂无此数据');
when others then dbms_output.put_line(sqlcode||'-----'||sqlerrm);
end;

//插入员工数据
create procedure insert_pro (eid employees.employees_id%type ,ename employees.last_name%type,
dep_id employees.department_id%type  )
is
dep_remain exception;
pragma exception_init(dep_remain,-1)
begin
insert into employees(employee_id,last_name,department_id) values(eid,ename,dep_id) ;
dbms_output.put_line('数据插入成功');
exception
when dep_remain then dbms_output.put_line('违反数据完整性约束,请检查dep_id参数');
when others then dbms_output.put_line(sqlcode||'----'||sqlerrm);
end;

以上两种都是我们传入参数,那么我们如何通过存储过程获得参数,首先过程是没有返回值的,所以肯定不同能通过返回值了,那么还剩的一个方法就是,通过形式参数给实参赋值,我们得到实参不就想到于得到想要的数据了,也就是将传入参数改为用输出参数或输入输出函数(out 或in out 修饰的);示例如下:

//eg:获取某部门工资总和 和部门总人数

create or replace procedure get_salary(dep_id employees.department_id%type,
emp_count out number(4), v_sumsal out number(9))
//emp_count采用的 out修饰 即为输出参数。
is

begin
select sum(salary),count(*) into v_sumsal ,emp_count from employees where department_id = dep_id;
exception
when no_data_found then dbms_output.put_line('你输入的部门不存在');
when others then dbms_output.put_line(sqlcode||'---'||sqlerrm);
end;

(2)存储过程的调用
存储过程的调用可以使用execute 语句调用,但是对于有变量参与的,则不宜用这种方法,还是用和函数一样在程序块中调用。
格式如下:
EXECUTE procedure_name (parameter1,parameter2…);
如:调用删除指定员工信息的存储过程del_pro
EXECUTE del_pro(23);

对于我们需要有“返回”结果的存储过程,我们还是使用程序块调用:
如:调用获取某部门工资总和 和部门总人数get_salary存储过程

declare
v_ecount number(5);
v_esumsal number(10);
v_dep_id employees.department_id%type := &dep_id; 
begin
get_salary(v_dep_id,emp_count =>v_ecount,v_sumsal => v_esumsal );
dbms_output.put_line('部门编号为:||dep_id||'总工资为:'||v_esumsal||'总人数为:'||v_ecount);
end;

(3)删除存储过程
DROP PROCEDURE [user.]procedure_name;

在Shell中执行Oracle存储过程并获取返回值的方法 然后,我们声明了一个名为p_employee_count的变量,它将用于接收存储过程的返回值。在本文中,我们将探讨如何在Shell脚本中执行Oracle数据库中的存储过程,并获取该存储过程的返回值。假设我们有一个名为"get_employee_count"的存储过程,它接受一个部门ID作为参数,并返回该部门中员工的数量。在上面的脚本中,我们首先设置了Oracle数据库的环境变量,包括ORACLE_HOME和LD_LIBRARY_PATH。存储过程的返回值将被存储在变量:p_employee_count中。 阅读详情

相关推荐

PVT(Process Voltage Temperature)

芯片PVT

网始如芯个人博客 3万+

oracle+Java 存储过程的调用,返回值是数组对象

java+orcle+存储过程

hylshyshm的博客 618

深度学习模型轻量化方法之【量化】

量化虽然有着硬件友好和功效提升的特点,但它也引入了模型性能的折衷。因此,设计有效的量化策略需要在模型大小、性能以及运算速度之间做出平衡。随着深度学习算法和硬件加速技术的快速发展,量化方法在使深度网络轻量化和提高部署效率方面持续发挥着重要作用。

m0_73916791的博客 2847

mybaits存储过程oracle返回对象

存储过程在小公司用的不多,但是如果业务比较复杂或者性能要求比较苛刻的时候存储过程就派上用场了,ibatis的前期的一些版本貌似不支持存储过程因此我选择了mybatis来做实验。 1.无输入和输出参数的存储过程,我写了一个比较简单的,需要注意的是Oracle无参存储过程不能写括号 CREATE OR REPLACE Procedure cascadeoperation As Begin De...

M_Jack的博客 836

【学习笔记-QGIS】 QGIS从零快速上手

安装文章参考:https://zhuanlan.zhihu.com/p/370633306。

Xcong_Zhu的博客 1万+

我的AI学习 ai维护工具之langfuse

as_type: Optional[Literal[‘generation’]] = None, # 将记录定义为 Observation (LLM 调用)transform_to_string: Optional[Callable[[Iterable], str]] = None # 将输出转为 string。要用LangFuse的云服务,首先要在LangFuse官网上注册,注册完后将页面拉倒最后,点免费的SignUp,API文档:https://api.reference.langfuse.com/

liubaobin的博客 4095

oracle 存储过程

CREATE OR REPLACE PROCEDURE protest(vacdt in varchar) AS cursor cur_inst is select LOG_NO, AC_DT from table where AC_DT = vacdt; record cur_inst%rowtype; i_count int; i_allcount int; BEGIN dbms_output.put_line('开始更新xxxx数据日期:' || vacdt.

wliang578的博客 371

告别‘Duang’的一声:手把手解决RK3588开发板PCIe初始化卡死问题(DTS修改实战)

本文详细介绍了解决RK3588开发板PCIe初始化卡死问题的完整过程,包括问题诊断、DTS文件修改及编译烧写步骤。通过禁用未使用的PCIe硬件资源,有效解决了启动卡死问题,为嵌入式开发者提供了实用的调试方法和经验总结。

weixin_30753873的博客 216

Oracle数据库常见对象-索引、视图、存储过程、函数和触发器

转发来源:https://blog.youkuaiyun.com/someonemh/article/details/80773582 以下总结常见的数据库对象,供自己复习 如有错误希望指出,共同学习! 一、索引 什么是索引? 索引是一种用于提高查询效率的数据库对象,使用索引可以快速定位数据,减少磁盘IO操作次数。索引是由数据库自动维护,删除或破坏索引不会对数据表造成影响,只会影响查询速度。 索...

Chunhong Song的专栏 1033

UDS诊断入门第一课:手把手教你玩转0x10会话控制服务(附ISO14229实战解析)

刚接触汽车电子诊断的工程师们,往往会被厚厚的ISO 14229标准文档和各种专业术语吓退。但就像学习编程要从"Hello World"开始一样,掌握UDS协议的最佳切入点就是0x10诊断会话控制服务。这个看似简单的服务,实际上是整个诊断系统的"钥匙"——它决定了ECU(电子控制单元)当前处于何种工作模式,直接影响着其他诊断服务的可用性。 在实际车辆诊断中,ECU默认处于DefaultSession模式,这种模式下许多高级诊断功能是被禁用的。想象一下你正在开发一个需要刷写ECU固件的工具,如果连最基本的会

weixin_30402343的博客 394

避坑指南:STM32CubeMX安装后,你的第一个工程为什么中文全是乱码?

本文详细解析了STM32CubeMX安装后中文乱码问题的根源及解决方案。从诊断乱码现象到分析编码冲突背景,提供了新项目UTF-8化、旧项目GBK兼容及版本降级等多种实用方案,帮助开发者彻底解决这一常见问题。

weixin_30699955的博客 475

oracle 过程触发修改,关于oracle:如何扩展Liquibase以生成包含存储过程,函数和触发器的更改日志?...

目前,当您尝试在现有数据库上生成更改日志时,Liquibase有一些限制。 它不会导出以下类型的对象:存储过程,函数,包触发器类型参考:http://www.liquibase.org/documentation/generating_changelogs.html据我所知,我需要开发自己的liquibase.snapshot.SnapshotGenerator实现。 我知道如何从Oracle获取...

weixin_42498989的博客 240

2026年华为od机试真题题库

OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)

面试高手的博客 19万+

Oracle和SQLServer分别使用函数和存储过程返回结果集

<br />我们知道,SQLServer无论是函数还是存储过程,其返回结果集都是较为简单的,在这里我们就不多加说明了,下面我们将通过实例详细分析一下Oracle的函数和存储过程返回结果集的方法:<br />1、函数<br />首先创建某一个对象类型如下:<br /><br />CREATE OR REPLACE TYPE "NS_FB_BUSINESS_SPECIALVAL_ROW"                                                               

IT学习 9879

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 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")

Oracle存储过程和存储函数

参看https://www.imooc.com/learn/370 Oracle存储过程、 存储函数 说明:存储过程、存储函数都是对象。包括表、视图、索引、序列、同义词等也是对象。 概念:指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。 特点:完成特定功能的程序。 区别:存储函数可以通过return子句返回一个值。 --...

weixin_30902675的博客 79

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

oracle访问数据库,调用存储过程,存储函数

public class OracleDemo { @Test public void javaCallOracle() throws Exception { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection connection = DriverManager.getCon...

qq_40790042的博客 634

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java执行存储过程_java调用存储过程、存储函数

需要用到的接口接口 CallableStatementJDK文档对改接口的说明:public interface CallableStatementextendsPreparedStatement用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形...

weixin_35346761的博客 599

oracle输出hello world,oracle学习之第一个存储过程:打印Hello World

数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数存储过程:指的是存储在数据库中供全部用户程序调用的子程序叫存储过程、存储函数存储过程和存储函数的同样点:完毕特定功能的程序存储过程和存储函数的差别:是否用return语句返回值(存储函数能够,可是存储过程不行)--第一个存储过程:打印Hello World/*调用存储过程2种方式:1、exec sayhelloworld();2、begi...

weixin_29219539的博客 590

Oracle 存储过程、存储函数、程序包

Oracle数据库对象 表 视图 索引 序列 同义词 存储过程 存储函数等 存储过程、存储函数 存储在数据库中供用户程序调用的子程序 相同点:完成特定功能的程序 区别:存储函数用return语句返回值 注: 一般来讲:如果只有一个返回值,则用存储函数,否则(有多个或者没有返回值),使用存储过程 存储过程 创建存储过程语法: create or replace pro...

好记性不如烂笔头 579

Oracle如何重新编译全部视图,oracle中如何批量编译视图和存储过程

最近expdp迁移数据后,大量视图同义词失效,单个编译麻烦死,生成存储过程批量编译,方便,快捷。1.批量编译存储工程的存储过程create or replace procedure compile_invalid_procedures(p_owner varchar2 -- 所有者名称,即 SCHEMA) as--编译某个用户下的无效存储过程str_sql varchar2(200);beginf...

weixin_39965514的博客 1794

JDBC-调用函数&存储过程

JDBC_调用函数&存储过程 调用函数用{?=call<procedure-name>[(<args1>,<args2>,...)]} 实例代码 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connectio...

Aqours的博客 686

Oracle回顾--存储过程、函数、程序包

看完了两天了,却因为各种事情到现在才有时间来写博客,方便日后查看了…… PL/SQL的子程序有两种形式,即过程和函数,过程与函数的区别在于函数有返回值,可以向调用者返回执行结果,而过程没有返回值。 一、存储过程 存储过程是一段存储在数据库中执行某功能的程序。是将一些固定的操作集中起来由Oracle数据库服务器来完成,以实现某个任务,是Oracle开发者在数据转换或查询报表时经常使

cxx_317的博客 668

oracle中如何批量编译视图和存储过程

最近expdp迁移数据后,大量视图同义词失效,单个编译麻烦死,生成存储过程批量编译,方便,快捷。   1.批量编译存储工程的存储过程 create or replace procedure compile_invalid_procedures(     p_owner varchar2 -- 所有者名称,即 SCHEMA ) as --编译某个用户下的无效存储过程     str_s

阿磊的菜鸟 5308

Oracle数据库迁移到AntDB和PostgreSQL

很多时候我们会涉及到数据库备份与迁移,本章节Oracle数据库如何迁移至PostgreSQL或AntDB数据库。以下主要介绍以命令方式迁移。 一、登录oracle数据库 sqlplus 登录: sqlplus username/'password'@10.19.82.196/testdb 二、Oracle侧对象统计: select OBJECT_TYPE,count(*) from user_objects group by OBJECT_TYPE order by 2; OBJECT_TYPE

yump的博客笔记 1283

Oracle存储过程和自定义函数详细讲解

存储过程和存储函数 存储在数据库中供所有用户程序调用的子程序叫做存储过程,存储函数。 区别:是否可以通过return返回函数值。存储函数可以通过return返回函数值,而存储过程不可以。 相同点:完成特定功能的程序。 由于通过out参数,存储过程也可以返回函数值,所以存储过程和存储函数已经没有太大的区别了。而存储函数仍然存在,是由于oracle不断升级,需要实现向下兼容,所以存储函数就...

挖坑埋你 1万+

Oracle 10g管理存储过程——查询数据库中的视图、存储过程、函数

数据库字典视图user_objects用于显示当前用户包含的所有对象。它不仅可以用于列出用户的表、视图、索引等,也可以用于列出用户的存储过程、函数、包。 --1、查询数据库中的视图、存储过程、函数 select object_name,created,status from user_objects where object_type in ('PROCEDURE','FUNCTION

深蓝色的忧伤 918
上一篇: PL/SQL基础知识讲解之异常(EXCEPTION)
下一篇: oracle数据库对象--触发器(TRIGGER)
黄小小州
博客等级 码龄10年 16粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值