Oracle 存储过程入门(一)
一,基本入门介绍
公司系统需要用到oracle,可是还没在项目用过oracle,好吧,从基本学起。有问题的地方,欢迎指导啊。
看创建存储过程的基本定义。注意,带有[]的都是可选的,可有可无的。只是语法能通过,当然根据自己需要处理。
还是从简单例子开始学习,
CREATE [OR REPLACE] PROCEDURE procedure_name
[ (parameter [,parameter]) ] IS
[declaration_section] BEGIN
executable_section [EXCEPTION
exception_section] END [procedure_name];
先初始化数据。我用的是Toad工具,下面的代码是在SQL Editor 中执行的。
create table students
(
ID int,
userName varchar(100),
userPass varchar(100),
userAge int
) insert into students values(1,'jack','jjjaa',23);
insert into students values(2,'rose','jjjaa',21);
insert into students values(3,'lucy','jjjaa',22);
insert into students values(4,'Tony','jjjaa',24);
commit;
当然,新建存储过程是需要在Procedure Editor中编写,但是执行存储过程又需要在SQL Editor中去执行,Procedure中是不可以执行(like exec的语句)的。
这里我们新建一个存储过程,对于某个用户添加年龄,哈哈,当然这个是没什么意义的,学习,从简单入手。在实际开发中,语法,原理是一样的。
create or replace procedure SP_Update_Age
(
uName in varchar,--note,here don't have length ,sql have lenth ,not in oracle.
Age in int
)
as
begin
update students set UserAge = UserAge + Age where userName = uName;
commit;
end SP_Update_Age;
在执行存储过程之前,我们先查看原来的数据。
select * from students /********************* ID USERNAME USERPASS USERAGE 1 jack jjjaa 23
2 rose jjjaa 21
3 lucy jjjaa 22
4 Tony jjjaa 24 **********************/
然后我们在SQL Editor中执行如下存储过程。注意看是怎么调用的:
exec SP_UPDATE_AGE('jack',1);
执行之后,查看数据,
select * from students; /******************** ID USERNAME USERPASS USERAGE 1 jack jjjaa 24 --noted,have changed
2 rose jjjaa 21
3 lucy jjjaa 22
4 Tony jjjaa 24 *********************/
二,基本语法介绍
可以看出,基本的功能实现,调用完成。
下面,来看看基本语法:
1,变量赋值
变量名 := 值;
2,判断语句。
if
比较式
then
begin
end;
end
if
结合起来写个简单例子:
create or replace procedure Test(x in out number)
is
begin
if x<0 then
begin
x:= 0 - x;
end;
elsif x > 0 then --noted here elsif
begin
x:= x ;
end;
else
x:= 0;
end if;
end Test;
Test:
set serveroutput on; --没这句话,看不到dmbs_output信息。
declare
num number;
begin
num:= -1;
test(num);
dbms_output.put_line( 'num = ' || num );
end;
/******************************
num = 1
PL/SQL procedure successfully completed.
*******************************/
3,For循环,
For in ..loop;
set serveroutput on;
DECLARE
x NUMBER := 100;
BEGIN
FOR i IN 1..10 LOOP --noted here
IF MOD(i,2) = 0 THEN -- i is even
dbms_output.put_line( 'i: '||i||' is even ' );
ELSE
dbms_output.put_line('i: '|| i||' is odd' );
END IF;
x := x + 100;
dbms_output.put_line('x value: '|| x);
END LOOP;
COMMIT;
END; /*************************
i: 1 is odd
x value: 200
i: 2 is even
x value: 300
i: 3 is odd
x value: 400
i: 4 is even
x value: 500
i: 5 is odd
x value: 600
i: 6 is even
x value: 700
i: 7 is odd
x value: 800
i: 8 is even
x value: 900
i: 9 is odd
x value: 1000
i: 10 is even
x value: 1100
PL/SQL procedure successfully completed. *************************/
后面再说遍历什么游标啊,数组啊。先从简单的 开始。
4,While 循环。
create or replace Procedure Test2(i in out number)
as
begin
while i < 10 loop
begin
i:= i+1;
end;
end loop;
end Test2;
来测试下。
set serveroutput on;
declare
num number;
begin
num:= 1;
test2(num);
dbms_output.put_line( 'num = ' || num );
end; /********************* num = 10
PL/SQL procedure successfully completed. ***********************/
第一篇就先写到这里,对Oracle的存储过程有个简单的认识。
Oracle 存储过程入门(一)的更多相关文章
- [转]oracle学习入门系列之五内存结构、数据库结构、进程
原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...
- ORACLE——存储过程
存储过程procedure 被内容来自<oracle从入门到精通——明日科技>一书 存储过程是一种命名的PL/SQL程序快,存储过程被保存在数据库中,它不可以被SQL语句直接执行或调用,只 ...
- oracle job入门【原】
oracle job入门 准备工作 先做一张学生表Table 表STUDENT create table STUDENT ( id INTEGER, name ), age INTEGER, crt_ ...
- Oracle编程入门经典 第12章 事务处理和并发控制
目录 12.1 什么是事务处理... 1 12.2 事务处理控制语句... 1 12.2.1 COMMIT处理... 2 12.2.2 RO ...
- Oracle编程入门经典 第11章 过程、函数和程序包
目录 11.1 优势和利益... 1 11.2 过程... 1 11.2.1 语法... 2 11.2.2 建立或者替换... 2 11.2 ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- oracle 存储过程
来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...
- Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 ...
- ORACLE存储过程调用Web Service
1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...
随机推荐
- 洛谷P2661 信息传递 [NOIP2015] 并查集/乱搞 (待补充!
感觉我好水啊,,,做个noip往年题目还天天只想做最简单的,,,实在太菜辽 然后最水的题目还不会正解整天想着乱搞,,, 虽然也搞出来辽233333 好滴不扯辽赶紧写完去做紫题QAQ 正解:并查集 ...
- grunt学习一
grunt是前端自动化工具之一.下面是是grunt的简单小示例: 在使用grunt,确保安装nodejs,如果不清楚,可以百度找相关教程,这个教程已经烂大街了. 1.打开cmd,以管理员的身份.(或者 ...
- 如何设置dedecms自定义表单必填项?
用dedecms自定义表单可以制作一个简单的预约系统,有些相关信息需要设置为必填项,比如联系方式,没有留下真实的电话或其他信息,以后要怎么联系到你的客户.那我们要如何设置织梦cms自定义表单必填项呢? ...
- lua源代码学习(一)lua的c api外围实现
工作后,整个人已经比較松懈了.尽管一直在看lua的源代码.可是一直是比較零碎的时间,没有系统的整理,所以还是收获不多.由于近期工作也不是非常忙了,就想整理下lua的源代码学习的笔记.加深下印象,并分享 ...
- java-JProfiler(二)-进行本地JVM的性能监控-tomcat
监视本地的Tomcat, 看似是本地,其实JProfiler GUI在一个单独的JVM里启动,他与被监视的目标jvm之间通过socket通讯,目的为了不干扰目标JVM.所以监视本地Tomcat与监视远 ...
- abap关键字
1:abap将提升的关键字快捷输入 按tab键,提示的关键字将会自动输入. 2:shift tab 用于对其格式 3:ctrl+d 将改行复制到下一行.
- [vue]vue双向绑定$on $emit sync-模态框
双向绑定实现($on $emit) 关于父子之间数据更新同步, 如果单向绑定, 子修改了,父却没有修改, 这种一般不符合规范 正常更新数据的套路是: 1. 子通知父更新数据 2. 子自动刷新获取最新数 ...
- SqlAlchemy个人学习笔记完整汇总-转载
使用 sqlalchemy 有3种方式: 方式1, 使用raw sql; 方式2, 使用SqlAlchemy的sql expression; 方式3, 使用ORM. 前两种方式可以统称为 core ...
- Ubuntu16.04安裝最新Nvidia驱动
在安装完Ubuntu之后,可能通过自带驱动无法更新,一直处于无法下载状态,那么就需要通过到Nvidia官网下载驱动,手动安装了 方法/步骤 通过度娘,打开NVIDIA官网,然后在下载驱动那里找到自己的 ...
- slideUp() 函数
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...