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的更多相关文章
随机推荐
- Xposed 学习笔记
Xposed框架用法 1.配置AndroidManifest.xml <meta-data android:name="xposedmodule" android:value ...
- css半透明边框
html <div class="parent"> <div class="translucent">I am Bob</div& ...
- 平衡树Treap模板与原理
这次我们来讲一讲Treap(splay以后再更) 平衡树是一种排序二叉树(或二叉搜索树),所以排序二叉树可以迅速地判断两个值的大小,当然操作肯定不止那么多(不然我们还学什么). 而平衡树在排序二叉树的 ...
- JS ajaxfileUpload 一次性上传多个input控件 上传多个文件
本方法适用于一次性上传多个input框输入的文件,如下图所示,任务是需要一次上传两个input框提供的两个文件. 具体方法: 1.修改ajax调用方法 如上图所示,只需要将ajaxFileUpload ...
- flask-form用户登录与注册
用户登录 #!/usr/bin/env python # -*- coding:utf- -*- from flask import Flask, render_template, request, ...
- PE文件详解(六)
这篇文章转载自小甲鱼的PE文件详解系列原文传送门 之前简单提了一下节表和数据目录表,那么他们有什么区别? 其实这些东西都是人为规定的,一个数据在文件中或者在内存中的位置基本是固定的,通过数据目录表进行 ...
- JavaScript(六)函数
函数的声明方式 function name () {} 函数声明 var name = function(){} 函数表达式 所有函数都有返回值 未return 的函数 返回值 是 unde ...
- Lua和C的语法差别
没有main函数 Lua是脚本语言,没有固定入口的main函数.当lua解析器解析某个lua代码文件时,lua解析器一样一行的解析lua脚本. print("Hello lua") ...
- Java关于BufferedWriter.newline()换行的注意事项
最近项目中需要导出文件,其实导出文件是一个挺简单的事情.但是却遇到了很奇怪的问题. 首先导出到文件需要用到 BufferedWriter.而换行则是通过 bw.newline() 方法,问题将出在 n ...
- 基于input子系统的sensor驱动调试(一)
要想弄明白世界的本质,就要追根溯源:代码也是一样的道理: 最近调试几个sensor驱动,alps sensor驱动.compass sensor驱动.G-sensor驱动都是一样的架构: 一.基于in ...