Oracle 自定义函数、存储过程
讲函数之前,先介绍一下程序结构
3.程序结构
新建一个测试窗口,举一个小例子
declare
-- 声明变量,包括游标
begin
-- 执行部分
dbms_output.put_line('hello world!'); --异常处理
end;
变量声明时,类型可以用字段类型,也可以直接引用表的字段类型
举个小例子:
declare
-- 声明变量,包括游标
pagename varchar2(10);
lang1 langmap.lang1%type;
begin
-- 执行部分 select l.pagename, l.lang1
into pagename, lang1
from langmap l
where l.pagename = 'repair'
and l.msgid = '';
dbms_output.put_line('配置项目:' || pagename || ' 状态:' || lang1); --异常处理
end;
或者直接引用表的行类型
举个小例子:
declare
-- 声明变量,包括游标
v_langmap langmap%rowtype;
begin
-- 执行部分 select *
into v_langmap
from langmap l
where l.pagename = 'repair'
and l.msgid = '';
dbms_output.put_line('配置项目:' || v_langmap.pagename || ' 状态:' ||
v_langmap.lang1); --异常处理
end;
4.判断
begin
if 条件 then 内容 elsif 条件 then 内容 else 内容 end if;
end;
5.循环
begin
loop
exit when 条件 --语法部分 end loop;
end;
6.游标
不带参
declare
cursor c_notice is select t.noticeno,t.title from tenantnotice t;
v_no tenantnotice.noticeno%type;
v_title tenantnotice.title%type;
begin
--打开游标
open c_notice; --遍历游标
loop
fetch c_notice into v_no,v_title;
exit when c_notice%notfound;
dbms_output.put_line('编号:'|| v_no||',标题:'|| v_title);
end loop; --关闭游标
close c_notice;
end;
带参
declare
cursor c_notice(v_noticeno tenantnotice.noticeno%type)
is select t.noticeno,t.title from tenantnotice t where t.noticeno=v_noticeno;
v_no tenantnotice.noticeno%type;
v_title tenantnotice.title%type;
begin
--打开游标
open c_notice(''); --遍历游标
loop
fetch c_notice into v_no,v_title;
exit when c_notice%notfound;
dbms_output.put_line('编号:'|| v_no||',标题:'|| v_title);
end loop; --关闭游标
close c_notice;
end;
select into 是隐式游标,只能返回一行(存储过程输出值)
7.存储过程

存储过程没有declare,变量直接在is(或者as,相同的效果)和begin之间声明就行
1)无参无返回值
create or replace procedure kxy_Proc_hello is
--这里可以声明变量
begin
dbms_output.put_line('hello world');
end kxy_Proc_hello;
可在测试脚本中直接调用
begin
kxy_Proc_hello;
end;
也可以在命令行中调用
exec kxy_Proc_hello;
命令行有时候看不到结果,先执行
set serveroutput on
2)带参无返回值
create or replace procedure kxy_Proc_GetTitle(i_no in tenantnotice.noticeno%type)
is
v_title tenantnotice.title%type;
begin
select t.title into v_title from tenantnotice t where t.noticeno=i_no;
dbms_output.put_line(v_title);
end;
3)无参有返回值
4)带参有返回值
create or replace procedure kxy_Proc_GetTitle(i_no in tenantnotice.noticeno%type,o_title out tenantnotice.title%type)
is
begin
select t.title into o_title from tenantnotice t where t.noticeno=i_no;
end;
调用
declare
v_title tenantnotice.title%type;
begin
kxy_proc_gettitle('', v_title);
-- kxy_proc_gettitle('',o_title => v_title);--这样写也可以
dbms_output.put_line(v_title);
end;
8.函数
函数必须有返回值,可在sql语句中直接调用,可以不传参,也可以使用 in/out参数 输入输出
1)无参
create or replace function kxy_Fun_hello
return varchar2
is
--这里可以声明变量
msg varchar2():= 'hello world';
begin
return msg;
end; select kxy_Fun_hello() from dual;
Oracle 自定义函数、存储过程的更多相关文章
- Oracle自定义函数和存储过程示例,自定义函数与存储过程区别
参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
- 【转】Oracle 自定义函数语法与实例
原文地址:https://blog.csdn.net/libertine1993/article/details/47264211 Oracle自定义函数的语法如下: create or replac ...
- Oracle自定义函数1
用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数 ...
- Oracle自定义函数
核心提示:函数用于返回特定数据.执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] da ...
- 基本开题的感觉是了-MySQL继续继续(自定义函数&存储过程)
hi 感觉论文开题基本确定了,凯森 1.MySQL -----自定义函数----- ----基本 两个必要条件:参数和返回值(两者没有必然联系,参数不一定有,返回一定有) 函数体:合法的SQL语句:以 ...
- Oracle自定义函数&加密
在sql中频繁使用的功能(逻辑.加密等)可以写成自定义函数进行封装,之后再调用即可. CREATE OR REPLACE FUNCTION "函数名" (参数名 参数类型 参数数据 ...
- oracle自定义函数:将使用点分隔符的编码转成层级码格式的编码
维护一个旧的系统,表设计中只有编码,而没有其他排序相关的字段,然后根据编码排序出现了顺序错乱的问题. 详细地说,其编码设计是使用[.]分隔符的编码,比如1.1.1.1.1.1.1.1.1.2这样的格式 ...
- Oracle 自定义函数实现列转行效果
在 Oracle 领域,我相信一说到列转行大部分人都会立马想到 WM_CONCAT 函数,我觉得主要是因为该函数比较实用.但事实上 WM_CONCAT 并非官方公开函数,使用会存在一定的风险:函数返回 ...
- sqlserver中自定义函数+存储过程实现批量删除
由于项目的需要,很多模块都要实现批量删除的功能.为了方便模块的调用,把批量删除方法写成自定义函数.直接上代码. 自定义函数: ALTER FUNCTION [dbo].[func_SplitById] ...
随机推荐
- .NET CORE微服务中CONSUL的相关使用
.NET CORE微服务中CONSUL的相关使用 1.consul在微服务中的作用 consul主要做三件事:1.提供服务到ip的注册 2.提供ip到服务地址的列表查询 3.对提供服务方做健康检查(定 ...
- AI GMM
GMM(Gaussian Mixture Model,高斯混合模型)通常用于聚类(也用于密度估计),数据是由k个高斯分布生成,每个分布表示一个类. 期望最大(Expectation Maximizat ...
- AI 强化学习
强化学习(reinforcement learning,简称RL), agent policy state action 目标 最大化累计reward 参考链接: https://en.wikipe ...
- 《通过C#学Proto.Actor模型》之Persistence
Actor是有状态的,当每一步执行失败后,返回失败地方继续执行时,希望此时的状态是正确的,为了保证这一点,持久化就成了必要的环节了. Proto.Actor提供了三种方式执久化: Event Sour ...
- Windows技巧
1 修改域名 像Linux的/etc/hosts一样,windows也有一个类似的hosts文件, C:/WINDOWS/system32/drivers/etc/hosts 添加如下域名与IP的映射 ...
- Web Storage和cookie
Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生; Web Storage的概念和cookie相似,区别是它是为了更大容 ...
- Java面试准备之JVM
介绍JVM中7个区域,然后把每个区域可能造成内存的溢出的情况说明 程序计数器:看做当前线程所执行的字节码行号指示器.是线程私有的内存,且唯一一块不报OutOfMemoryError异常. Java虚拟 ...
- React 特性剪辑(版本 16.0 ~ 16.9)
Before you're going to hate it, then you're going to love it. Concurrent Render(贯穿 16) 在 18年的 JSConf ...
- 【Android】pidcat 不显示日志输出
问题: 直接安装了 pidcat : brew install pidcat ,装完以后执行 pidcat <package name> ,发现没有日志输出,adb devices 也能 ...
- 微信公众号开发 [05] 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...