15,函数的创建,要求必须有返回值,必须在语句中调用,需要多个返回值时,使用out参数类型,在user_procedures表中查询属性,在user_source表中查询源代码,创建示例:

CREATE OR REPLACE FUNCTION my_function_01--创建函数
(v_01 IN NUMBER)--参数列表
RETURN NUMBER--返回类型
is--标识
res NUMBER;--变量的声明
BEGIN--函数主体
res := v_01;
RETURN res;--返回值
END;

  

16,异常,分为预定义异常(有名字,有编号),非预定义异常(有编号无名字),自定义异常(无名字无编号),两个常用异常,no_data_found,too_many_rows声明及处理自定义异常示例:

DECLARE
my_exp EXCEPTION;--声明一个异常
PRAGMA EXCEPTION_INIT (my_exp,-20113);--关联异常编号 20000-20999;
BEGIN
RAISE my_exp;--抛异常使用raise
EXCEPTION--语句中异常处理部分
WHEN my_exp THEN--获取异常 when .. then ..// when others then..
dbms_output.put_line('my exception');
END;

  

17,pl/sql中可以直接使用dml,dql语言,使用ddl语言时需要使用 execute immediate 关键字;示例:

DECLARE
v_str VARCHAR2(30);
BEGIN
v_str := 'create table stu(id number)';--dml语句
EXECUTE IMMEDIATE v_str;--使用关键字
END;

  

18,游标分静态游标与ref游标,静态的分为显式游标和隐式游标,显式游标使用需要四个步骤,单行循环提取示例:

  DECLARE
CURSOR cursor_01--声明一个无参数游标
IS
SELECT * FROM student;
v_stu student%ROWTYPE;--单行接收
BEGIN
OPEN cursor_01;--打开游标
LOOP
FETCH cursor_01 INTO v_stu;--从游标中提取
EXIT cursor_01%NOTFOUND;
.....
CLOSE cursor_01;--关闭游标
END;

  

使用多行循环提取到表提高效率示例:

DECLARE
CURSOR cursor_01--声明一个无参数游标
IS
SELECT * FROM student;
TYPE tab IS TABLE OF student%ROWTYPE;
v_stu tab;--表接收
BEGIN
OPEN cursor_01;--打开游标
LOOP
FETCH cursor_01 BULK COLLECT INTO v_stu LIMIT 2;--从游标中提取,每次提取两行
dbms_output.put_line(v_stu(1).sno);--取两行其中一行数据
EXIT cursor_01%NOTFOUND;
.....
CLOSE cursor_01;--关闭游标
END;

  

使用cursor for loop 简化查询:

DECLARE
CURSOR cursor_01--声明一个无参数游标
IS
SELECT * FROM student;
BEGIN
OPEN cursor_01;--打开游标
FOR cur IN cursor_01 --cursor for loop
LOOP
EXIT cursor_01%NOTFOUND;
dbms_output.put_line(cur.sno);
.....
CLOSE cursor_01;--关闭游标
END;

  

带参数游标主要是为了限制查询条件:

DECLARE
CURSOR cursor_01 (sn VARCHAR2(4))
IS
SELECT * FROM student WHERE sname LIKE '%'||sn||'%';--限制查询条件

  

隐式游标,默认名为sql,select into或dml操作会产生隐式游标,其属性值是最新执行的sql语句,对数据有影响sql%found则为true。

19,复合类型的变量声明,记录类型示例:

DECLARE
TYPE re IS RECORD--记录类型
(
v_id student.sno%TYPE,--单字段类型
v_sname VARCHAR2(10)
);
BEGIN
SELECT sno , sname INTO re FROM Student;
......

  

直接单行表类型声明:

DECLARE
v_stu student%ROWTYPE;--单行类型

  

索引表示例:

DECLARE
TYPE tab IS TABLE OF Student%ROWTYPE--索引表类型
INDEX BY BINARY_INTEGER;
t_stu tab;

  

Varray变长数组:

DECLARE
TYPE arr IS VARRAY(100) OF VARCHAR2(20);--变长数组,100大小
v_arr arr := arr('1','2');--初始两个元素

  

20,视图的创建示例:

CREATE OR REPLACE VIEW view_name
AS
SELECT * FROM Student;

  

Oracle数据库零散知识02的更多相关文章

  1. Oracle数据库零散知识08 -- 逻辑备份和还原(转)

    一.介绍逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程.逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程.物理备份即可在数 ...

  2. Oracle数据库零散知识09 -- DBLink的创建(转)

    通过创建database link实现Oracle跨数据库查询的方法 在Oracle本地数据库端执行赋权dbuser帐号 SQL> grant create database link to d ...

  3. Oracle数据库零散知识07 -- Materialized view(转)

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体 ...

  4. Oracle数据库零散知识03

    21,存储过程,简化复杂操作,增加数据独立性,提高安全性,提高性能 与函数创建对比: create or replace function fun_01(v_01 in number) return ...

  5. Oracle数据库零散知识06 -- Package的定义与简单触发器

    CREATE OR REPLACE PACKAGE pak_02 IS--包头 --这里可定义公共参数 FUNCTION fun_01 RETURN NUMBER; PROCEDURE pro_01 ...

  6. Oracle数据库零散知识05 -- 表创建,修改

    1.表的创建 Create table student02(sno number); 2.表的删除 Drop table student02; 3.表的重命名 Rename student02 to ...

  7. Oracle数据库零散知识04 --- 其常用内置函数

    1,数值函数 Select abs(-9),--9 绝对值 Mod(5,3),--2 余数 Sign(-9),-- -1 标记 Ceil(9.4),--10 Floor(9.8),--9 Sqrt(1 ...

  8. oracle数据库零散知识01

    1,rownum 是一个虚列,使用时必须包括1才能使用,rownum = 1,rownum < 10;  rownum = 2是不可以的: 2,if case loop 要加end结束,end ...

  9. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

随机推荐

  1. Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值

    Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值 题外话:一个问题研究到最后,那边记录文档的前半部分基本上都是没用的,甚至是错误的. 重点在最后,前边不过一些假想猜測. ht ...

  2. Java vs C++:子类覆盖父类函数时缩小可访问性的不同设计

    Java 和 C++ 都是面向对象的语言,允许对象之间的继承.两个语言的继承都设置有允许子类覆盖父类的“虚函数”,加引号是因为 Java 中没有虚函数这一术语,但是我们的确可以把 Java 的所有函数 ...

  3. 【例题 6-17 UVa 10562】Undraw the Trees

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟+递归 [代码] #include <bits/stdc++.h> using namespace std; con ...

  4. [Angular2 Router] Configure Auxiliary Routes in the Angular 2 Router - What is the Difference Towards a Primary Route?

    In this tutorial we are going to learn how we can can configure redirects in the angular 2 router co ...

  5. Android自己定义View画图实现拖影动画

    前几天在"Android画图之渐隐动画"一文中通过画线实现了渐隐动画,但里面有个问题,画笔较粗(大于1)时线段之间会有裂隙.我又改进了一下.这次效果好多了. 先看效果吧: 然后我们 ...

  6. python opencv3 —— 改变颜色空间(color space)

    OpenCV: Changing Colorspaces 1. 查看 opencv 支持的颜色空间转换 opencv 中色彩空间转换由一些定义的全局的宏给出,使用如下的代码,将它们调出: >&g ...

  7. 6、修改应用程序数码相框以支持自动关闭LCD

    1. 修改数码相框以自动关闭LCD关闭LCD : 在读取触摸屏的函数中判断:如果15S内无数据,执行: echo auto > /sys/devices/platform/mylcd/power ...

  8. Understanding Cubert Concepts(一)Partitioned Blocks

    Understanding Cubert Concepts(一)Partitioned Blocks Cubert Concepts 对于Cubert,我们要理解其核心的一些概念,比方BLOCK.这些 ...

  9. Python代码优化及技巧笔记(一)

    前言 这里是记录一些本人在开发过程中遇到的一些细节问题.与君共勉. 版权说明 著作权归作者全部.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Coding-Naga链接:http://bl ...

  10. 使用UIDataDetectorTypes自己主动检測电话、网址和邮箱

    支付宝公布最新版本号9.0.再一次引发一场撕逼大战.微信说支付宝抄袭了它.支付宝说微信一直都在抄袭自己.在我看来.微信和支付宝都抄袭了对方.对于大佬们的抄袭.我们也是司空见惯了. 支付宝这一次更新,真 ...