oracle 9i从入门到精通读书笔记2
2.1 PL/SQL程序结构
2.1.1 PL/SQL块的类型
所有的PL/SQL程序都是以块作为基本单位,以及都是由块组成的。
这些块可以是按顺序出现的,也可以是嵌套的
块可以根据其带名称和不带名称以及在数据库中的存储方式分为以下类型:
匿名块:只能执行一次,不能存储在数据库中
带名块:一种带标签的匿名块
子程序:可以存储在数据库中的过程,函数和包,可以多次执行,可以在外部的程序中显示调用
触发器:存储在数据库中的带名块,当相应的触发事件发生时触发器就被自动执行,触发器事件一般是针对特定的数据库表进行的DML语句,如INSERT,UPDATE,DELTE
<<I_Namedblock>>
DECLARE
v_num1 NUMBER := 1;
v_num2 NUMBER := 2;
v_str1 VARCHAR2 (30) := '你好!';
v_str2 VARCHAR2 (30) := '这是你第一次接触PL/SQL';
v_outputstr VARCHAR2 (30);
BEGIN
INSERT INTO test_table(ncolumn, vcolumn)VALUES (v_num1, v_str1);
INSERT INTO test_table(ncolumn, vcolumn)VALUES (v_num2, v_str2);
SELECT vcolumn INTO v_outputstr FROM test_table WHERE ncolumn = v_num1;
DBMS_OUTPUT.put_line (v_outputstr);
SELECT vcolumn INTO v_outputstr FROM test_table WHERE ncolumn = v_num2;
DBMS_OUTPUT.put_line (v_outputstr);
END I_Namedblock;
带名块就是在匿名块前面加上一个标签
把DECLARE关键字 变成 CREATE OR REPLACE PROCEDURE 就变成了存储过程
CREATE OR REPLACE PROCEDURE 过程名 IS
2.1.2 PL/SQL块的结构
所有块都包含3个部分:声明部分,执行部分,异常处理部分
DECLARE
v_ncolumn NUMBER :=6;
v_vcolumn VARCHAR2(30);
BEGIN
SELECT v_column INTO v_vcolumn FROM test_table WHERE ncolumn=v_ncolumn;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到匹配的数据');
END;
在过程和函数中声明变量是不需要DECLARE的,但在声明TRIGGER中的变量是必须要有DECLARE
如果块中不需要声明变量,类型和游标时,声明部分可以省略
执行部分是不可缺少的,一般以BEGIN开始 END结束。END关键字必须是分号结束的
2.1.3 词法单位
e代表乘以10的多少次幂
2.2 变量声明
Variable_name [CONSTANT] type [NOT NULL][:=value | DEAFULT value]
Variable_name是变量名
CONSTANT 声明的是一个常量
Type 是类型
NOT NULL 可选,表示不能为空
:=value | DEAFULT value表示赋值
缺省的变量会被初始化为NULL
不能把NULL付给一个定义为NOT NULL的变量acct_id INTEGER(5) NOT NULL;这样是不允许的
在NATURAL和POSITIVEN,他们被预先定义为NOT NULL
每行只能声明一个变量,这和其他语言不同
BEGIN END;是可以嵌套的
2.3 变量类型
4中标量类型(数字类型,布尔型,字符型,日期型)
复合型
引用型
LOB型
数字型的三种基本类型:BINARY_INTEGER,NUMBER,PLS_INTEGER
字符型:CHAR,VARCHAR2,LONG和LONG RAW,RAW,ROWID和UROWID
LOB类型:BFILE,BLOB,CLOB,NCLOB
布尔类型:BOOLEAN(TRUE,FALSE,NULL)
日期时间类型:DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL YEAR TO MONTH,INTERVAL DAY TO SENCOND
复合类型:记录,表,数组
引用类型:REF CURSOR 和ref object_type
用户自定义类型
2.4 数据类型转换
显式转换,可以使用内置函数
隐式转换,隐式转换不是好的习惯,可能会影响效率,结果可能不可预料
2.5 表达式
表达式是由操作符和运算符的结合
CASE 表达式
CASE SELECTOR
WHEN express THEN result1
WHEN express THEN result3
WHEN express THEN result2
END;
转载于:https://www.cnblogs.com/myfreefield/archive/2011/04/03/2004392.html
oracle 9i从入门到精通读书笔记2相关推荐
- mysql数据应用从入门_MYSQL数据库应用从入门到精通----读书笔记
mysql 1.创建数据库 create database database_name; 2.查看数据库 show database_name; 3.选择数据库 use database_name; ...
- FFmpeg从入门到精通读书笔记(1)
笔者才开始学习音视频开发,FFmpeg从入门到精通读书笔记系列主要是基于阅读刘歧.赵文杰编著的<FFmpeg从入门到精通>以及雷霄骅博士博客总结写的入门心得体会. 官方文档资料 FFmpe ...
- Mybatis从入门到精通读书笔记
Mybatis从入门到精通 resultMap resultMap简介 resultMap resultMap简介 P25-P26
- python编程从入门到精通读书笔记(基础知识)
第一部分:基础知识 学习python想要做的软件 1.开机答题软件,(电脑一开机的输入密码,改为答题,初步设定为选择题,答对了才可以进入.) 2. 第二章 2.1第一个程序: print(& ...
- 《分析服务从入门到精通读书笔记》第四章、创建父子维度(7)
目的 父子维度的不同之处在于处于其包含了一个基于递归关系(Recursive relationship)的层次关系,比如,上级和下级雇员的层次结构关系是典型的递归关系.在一线工作的雇员会有一个主管,而 ...
- php 到精通 书,PHP从入门到精通——读书笔记(第20章:Zend Framwork框架)
第二十章:Zend Framwork 框架 1:概述 2:Zend Framwork 环境搭建1)环境配置:使用ZF框架进行项目开发,首先需要对PHP运行环境进行配置,从而使整个运行环境能够支持ZF的 ...
- 《分析服务从入门到精通读书笔记》第一章、维度数据仓库(4)
简介 商业智能系统将维度数据仓库作为数据存取层.数据仓库存储在关系型数据库管理系统(RDBMS)中,打一个非常简单的比方,你可以将关系数据库简单地想作一系列的表格.每个表格有行和列,就行Excel电子 ...
- HTML5 从入门到精通读书笔记
此书太水, 没什么有营养的内容. HTML5中新添加的 thead, tbody, tfoot 为语义化标签, 没什么实际效果. table 中元素的 colspan 和 rowspan 用来设定单元 ...
- 《分析服务从入门到精通读书笔记》第一章、数据分析基础(1)
目的 学习一些商业智能的基本概念,如属性.层次结构和维度 数据分析中的属性 假设如果你是AWC公司的总经理,希望了解公司的业绩,于是从业务人员那里得到一份报表 表1.1 AWC公司业绩 42 ...
最新文章
- 一口气说出四种幂等性解决方案,面试官露出了姨母笑~
- ElasticSearch IK分词器安装
- Python爬虫(二)——豆瓣图书决策树构建
- 区块链BaaS云服务(30) 字节方舟 ByteArk
- 如何消除网站安全的七大风险
- Redis-Session无状态会话技术
- [转载][总结]函数getopt(),getopt_long及其参数optind
- Ubuntu下使用UFW配置防火墙(简化iptables的操作)
- HDU1176:免费馅饼(dp,数字三角形的应用)
- mysql 数据导出语句_mysql导出数据语句
- 《左耳听风》读书笔记
- android7.0后台,安卓7.0带来一键清理后台 真能使手机变快吗
- 用Python下载Lofter上“喜欢”的文章和图片
- 笔记本显示器仅计算机,Nvidia X服务器设置仅显示1个屏幕(笔记本电脑+已连接外部显示器)...
- 【原创】从BZOJ2683 简单题中 整 CDQ分治解决三维偏序
- Cheat Engine游戏脚本修改器通关教程(脑残版Step9)
- C#代码中用UL 0B 0X等前后缀表示数字
- Future.get()抛出ExecutionException或InterruptedException?
- 报错Permission denied: user=root, access=EXECUTE, inode=“/tmp/hadoop-root“解决办法
- Android作业:设计一个能在图片上涂鸦的程序
热门文章
- C#前后端操作json数据
- 洛谷 P4026 [SHOI2008]循环的债务
- hibernate状态转换关系图【原】
- 软件与软件工程的概念
- ASP.NET(c#)实现重定向的三种方法的总结
- android编程常见问题- Resource ID #0x7f070001 type #0x12 is not valid
- curl 请求日志_HTTP入门(一):在Bash中curl查看请求与响应
- 第5章-css选择器初级和背景
- 小程序json字符串取值问题,怎么取出来的是undefined,eval函数不能用?
- JAVA spring 常用包作用详解(转)