讲函数之前,先介绍一下程序结构

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 自定义函数、存储过程的更多相关文章

  1. Oracle自定义函数和存储过程示例,自定义函数与存储过程区别

    参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...

  2. Mybatis下配置调用Oracle自定义函数返回的游标结果集

    在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...

  3. 【转】Oracle 自定义函数语法与实例

    原文地址:https://blog.csdn.net/libertine1993/article/details/47264211 Oracle自定义函数的语法如下: create or replac ...

  4. Oracle自定义函数1

    用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数 ...

  5. Oracle自定义函数

    核心提示:函数用于返回特定数据.执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] da ...

  6. 基本开题的感觉是了-MySQL继续继续(自定义函数&存储过程)

    hi 感觉论文开题基本确定了,凯森 1.MySQL -----自定义函数----- ----基本 两个必要条件:参数和返回值(两者没有必然联系,参数不一定有,返回一定有) 函数体:合法的SQL语句:以 ...

  7. Oracle自定义函数&加密

    在sql中频繁使用的功能(逻辑.加密等)可以写成自定义函数进行封装,之后再调用即可. CREATE OR REPLACE FUNCTION "函数名" (参数名 参数类型 参数数据 ...

  8. oracle自定义函数:将使用点分隔符的编码转成层级码格式的编码

    维护一个旧的系统,表设计中只有编码,而没有其他排序相关的字段,然后根据编码排序出现了顺序错乱的问题. 详细地说,其编码设计是使用[.]分隔符的编码,比如1.1.1.1.1.1.1.1.1.2这样的格式 ...

  9. Oracle 自定义函数实现列转行效果

    在 Oracle 领域,我相信一说到列转行大部分人都会立马想到 WM_CONCAT 函数,我觉得主要是因为该函数比较实用.但事实上 WM_CONCAT 并非官方公开函数,使用会存在一定的风险:函数返回 ...

  10. sqlserver中自定义函数+存储过程实现批量删除

    由于项目的需要,很多模块都要实现批量删除的功能.为了方便模块的调用,把批量删除方法写成自定义函数.直接上代码. 自定义函数: ALTER FUNCTION [dbo].[func_SplitById] ...

随机推荐

  1. c++11の条件变量

    一.条件变量的引入 std::condition_variable 解决了死锁并且控制的资源的访问顺序二避免不必要的等待.当互斥操作不够用而引入的.比如,线程可能需要等待某个条件为真才能继续执行,而一 ...

  2. UVA10054-The Necklace(无向图欧拉回路——套圈算法)

    Problem UVA10054-The Necklace Time Limit: 3000 mSec Problem Description Input The input contains T t ...

  3. loc iloc函数的区别

    import pandas as pd data1 = pd.read_excel(r"G:\Python\example1.xlsx") loc 用行列标签,iloc用数字索引. ...

  4. python错误和调试

    在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的. 有的错误是用户输入造成的,比如让用 ...

  5. 《通过C#学Proto.Actor模型》之Prpos

    在第一篇Proto.Actor博文中,HelloWorld的第一行真正代码是:    var props = Actor.FromProducer(() => new HelloActor()) ...

  6. c# throw和throw ex

    c# throw和throw ex 我们在日常开发当中,经常会用到exception异常,并且我们会在exception中的catch块中throw exception,例如: static void ...

  7. openstack基础:网络

    Neutron 功能 Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 *** 等.Neutron 提供了一个灵活的框架,通过配置,无论是开源还 ...

  8. Static Sushi AtCoder - 4118 (技巧枚举)

    Problem Statement "Teishi-zushi", a Japanese restaurant, is a plain restaurant with only o ...

  9. Day3 Numerical simulation of optical wave propagation之标量衍射理论基本原理(三)

    3.标量衍射理论 光源通常不是简单地平面.球面或高斯光束波.对于更一般的情况,必须使用更老练的方法来求解标量赫姆霍兹方程,需要利用格林定理并灵活使用边界条件. 基本问题:给定源平面光场U(x1,y1) ...

  10. AJAX异步、sweetalert、Cookie和Session初识

    一.AJAX的异步示例 1. urls.py from django.conf.urls import url from apptest import views urlpatterns = [ ur ...