Oracle数据库零散知识02

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;

  

时间: 2024-10-16 02:57:32

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

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

通过创建database link实现Oracle跨数据库查询的方法 在Oracle本地数据库端执行赋权dbuser帐号 SQL> grant create database link to dbuser; 配置本地数据库服务器的tnsnames.ora文件 $ vi $ORACLE_HOME/network/admin/tnsnames.ora 增加需要远程连接服务器的连接配置,如: ORCL_REMOTE =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(

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

物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处.1.物化视图的类型:ON DEMAND.ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性:而ON COMMIT是说,一旦基表有了CO

Oracle数据库零散知识03

21,存储过程,简化复杂操作,增加数据独立性,提高安全性,提高性能 与函数创建对比: create or replace function fun_01(v_01 in number) return number--必须要求有返回值 as result number; begin result := power(v_01,2); return result; end; / Function created. select fun_01(9) from dual; FUN_01(9) ------

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

1.表的创建 Create table student02(sno number); 2.表的删除 Drop table student02; 3.表的重命名 Rename student02 to student01; 4.表的修改 Alter table student01 --列的修改 Add ob number Modify ob varchar2(2) Rename column ob to obnew Drop column obnew --约束 Add constraint pk_

oracle数据库零散知识01

1,rownum 是一个虚列,使用时必须包括1才能使用,rownum = 1,rownum < 10;  rownum = 2是不可以的: 2,if case loop 要加end结束,end if: 3,外键,foreign key(s) references table_name(pk) 4,创建一个表,复制内容 create table t_1 as select * from t_2; 5,存在一个表,复制内容 insert into t_1 select * from t_2; 6,清

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

CREATE OR REPLACE PACKAGE pak_02 IS--包头 --这里可定义公共参数 FUNCTION fun_01 RETURN NUMBER; PROCEDURE pro_01 ; END; CREATE OR REPLACE PACKAGE BODY pak_02 IS--包体 --这里可定义私有变量 FUNCTION fun_01 RETURN NUMBER IS BEGIN RETURN 666; END; PROCEDURE pro_01 IS BEGIN dbms

Oracle数据库基础知识

oracle数据库plsql developer 目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外键 创建删除索引 创建修改删除视图 二     SQL查询 基本的SQL语句 unionminusintersect 内连接外连接 子查询关联子查询 betweeninexists 复制表insert into selectselect into from 三     SQL查询优化 尽量少用 IN 操

Oracle数据库基础知识总结(一)

数据库名.实例名.数据库域名.全局数据库名.服务名,这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水. 我们现在就来把它们弄个明白. 一.数据库名 什么是数据库名? 数据库名就是一个数据库的标识,就像人的身份证号一样.他用参数 DB_NAME 表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名. 在数据库安装或创建完成之后,参数 DB_NAME 被写入参数文件之中.格式如下: DB_NAME=myorcl ... 数据库名的作用 数据库

oracle数据库基础知识汇总—30天(二)

1.新建数据库实例 ORA-OO922:选项缺失或无效:用户名和密码设置不合规,当时不会报错,安装时就会出现这个错误 标识符命名规则:1.必须以字母开始.2.长度不能超过30个单字节字符.3.只能包括A-Z,a-z,0-9,_,$和#.4.不能在相同用户下建立两个同名的对象.5.不能使用保留字和关键字 在同一台机器上,可以同时启动多个数据库实例. SQL语句分类: DML数据操作语句(insert,update,delete):DDL 数据定交语句(create table,drop table