oracle04_plsql
PLSQL:Procedural Language SQL
(1)
plsql的基本结构(a)
declare
id constant number(2):=2;--常量定义
name varchar2(10);--变量定义
mysal emp.sal%type;--引用emp表sal列的类型
myrow emp%type; --引用emp表行类型,相当于java中对象,该行类型包含所有列
no_data exception;--异常定义
cursor c1 is select sal from emp;--游标定义,该c1中相当于java中集合,给
cursor c2(dno number) is select sal from emp where deptno=dno;---带参游标定义,该c2相当于java中带泛型集合
no_data exception;
begin
raise no_data;
exception
when no_data then xx;
when others then xx;
end;
创建存储过程语法(b):
create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]
AS
begin
PLSQL子程序体;
End;
或者
create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]
is
begin
PLSQL子程序体;
End 过程名;
(2)循环语句
第1种
for i in 1..100
loop
end loop;
第2种
while
loop
end loop;
第3种
loop
fetch c1 into xx;
exit when xx
end loop;
(3)条件判断语句
if xx then
elsif xx then xx
elsif xx then xx
else xx
end if;
(4)存储过程
第1种:不带参数
create or replace procedure mypro1 as
--这里可以声明变量
begin
end;
第2种:带参数
create or replace procedure mypro2(eno in emp.empno%type,name out varchar2) as
--这里可以声明变量
myrow emp%rowtype;
begin
select * into myrow from emp where empno=eno;
name:=myrow.ename;
end;
调用
execute mypro1;
declare
name varchar2;
begin
mypro2(7369,name);
end;
(5)存储函数
create or replace function myfn1(eno in emp.empno%type) as
return varchar2;
--这里可以声明变量
myrow emp%rowtype;
begin
select * into myrow from emp where empno=eno;
name:=myrow.ename;
return name;
end;
调用:
execute myfn1(7369);
declare
name varchar2;
begin
name:=mypro2(7369);
end;
(6)java api 调用存储过程和存储函数
DriverManager.getConncetion()---Connection---prepareCall
CallableStatement---set in 参数直接通过设置类型setInt()---registerOutParameter--
call.execute();
CallableStatement调用存储过程和存储函数的sql语句
{call mypro1(?,?)}
{?=call myfn1(?)}
jdbc:oracle:thin:@ip/数据库
jdbc:mysql://ip/数据库
(7)包头和包体
create or replace package mypackage as
type mycursor is ref cursor;--自定义游标类型
procedure mypro(eno in number,o out mycursor);
--声明存储过程,可以在变量后面加上自定义的游标类型
end mypackage;
create or replace package body mypackage as
procedure myro(eno in number,o out mycursor)
as
begin
open mycursor for select * from emp where empno=eno;
end mypro;
end mypackage;
(7)触发器
create or replace trigger 触发器名
before|after
delete|update|insert
on 表名
for each row--行级触发器
begin
end;
raise_application_error(-2999,'') 系统定义错误
oracle04_plsql的更多相关文章
随机推荐
- JS 实现图片的预加载(转载)
图片预加载是web开发中一种应用相当广泛的技术,比如我们在做图片翻转显示等特效的时候,为了让图片在转换的时候不出现等待,我们最好是先让图片下载到本地,然后在继续执行后续的操作. 下面的函数实现了一个我 ...
- 搭建Vue.js开发环境(window10)
我在配置Vue.js环境的时候遇到了很多的问题,希望能把这些解决方法也介绍给大家,希望能帮到大家,共同学习. 如果要转发,请注明原作者和原产地,谢谢! 注释:下面任何命令都是在windows的命令行工 ...
- 【练习】Html
要求: 用html相关知识实现以下网页 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- mysql启动日志文件log_bin
今天正在无所事事的时候,突然收到需要我打开mysql的log_bin,当时我就懵逼了...不多说别的,我连这个log_bin在哪里,怎么知道是否启动了都不知道,怎么去做? 在万分纠结下,查询了很多资料 ...
- checkbox 全选或取消
Html: 点击label 也能 check <div class="checkbox"> <input class ...
- tcp链接断开的探测
有资料说,read.write都可以探测tcp的断开,但都不是实时的. 但是实际在某些设备上测试发现,即使开一个线程每隔一小段时间发一次心跳包(write),write也不能探测连接已经断开,而且这个 ...
- K:树、二叉树与森林之间的转换及其相关代码实现
相关介绍: 二叉树是树的一种特殊形态,在二叉树中一个节点至多有左.右两个子节点,而在树中一个节点可以包含任意数目的子节点,对于森林,其是多棵树所组成的一个整体,树与树之间彼此相互独立,互不干扰,但其 ...
- 垃圾回收(GC) 的基本算法
GC 作为一个长久的话题,从诞生[1]至今也算是经历了六七十年了,对于很多习惯于使用 Java/Python 的同学来说,对于内存的管理可能会稍微更陌生一些,因为这些语言在语言层面就屏蔽了内存的分配和 ...
- LVS集群ipvsadm命令和调度算法(6)
一.ipvsadm命令参考 为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍一下: 术语解释: 1.virtual-service-address:是指虚拟服务器的ip地址2.r ...
- MIME---multipart类型
1.3 multipart类型 MIME邮件中各种不同类型的内容是分段存储的,各个段的排列方式.位置信息都通过Content-Type域的multipart类型来定义.multipart类型主要有三 ...