1:三范式
a:一张表里必须要有主键,列不可分。
b:如果一张表里面,两个字段作为主键,那么其他字段不能够部分依赖这两个字段。

2:pl sql:Procedural language(过程语言)

写一个输出hello world的小程序。
begin
dbms_output.put_line('hello world!');
end;
/

set serveroutput on; --设置服务器端输出

写一个声明变量,然后赋值,最后输出的小程序。

declare
v_name varchar(20);
begin
v_name := 'jack';
dbms_output.put_line(v_name);
end;
/

exception 捕捉异常,如果执行程序过程中发生错误,会把异常跑到
exception代码块,others then就是上面的异常没有捕捉到时,会捕捉
所有的异常。

declare
v_num number;
begin
v_num := 0;
dbms_output.put_line(2/v_num);
exception
when others then
dbms_output.put_line('error');
end;
/

3:显示当前用户
show user;

4:变量的声明
declare
id number(4) :=1001;
name varchar2(30) :='jack';
begin
dbms_output.put_line(name);
end;
/

声明的变量用来放表里面的数据,但是表结构可能会产生变化,为了
在表结构产生变化时,声明的变量的类型也会产生变化,可以使用%type

declare
id number(4) :=1001;
name emp.empno%type :='jack';
begin
dbms_output.put_line(name);
end;
/

5:声明数据类型table 代表数组类型
声明一个数据类型type_table_name
declare
type type_table_name is table of emp.empno%type index by binary_integer;
v_empnos type_table_name;
begin
v_empnos(0):=1001;
v_empnos(1):=1002;
v_empnos(-1):=1003;
dbms_output.put_line(v_empnos(-1));
end;
/

6:声明数据类型record ,相当于java中的类

declare
type type_record_dept is record
(
deptno dept.deptno%type,
dname dept.dname%type,
loc dept.loc%type
);
v_dept type_record_dept;
begin
v_dept.deptno :=1001;
v_dept.dname :='sales';
v_dept.loc :='shanghai';
dbms_output.put_line(v_dept.loc);
end;
/

可以使用%rowtype来声明record,这样,即使dept这张表的数据结构发生变化,变量结构
也会随之发生变化。
declare
v_dept dept%rowtype;
begin
v_dept.deptno :=1001;
v_dept.dname :='sales';
v_dept.loc :='shanghai';
dbms_output.put_line(v_dept.loc);
end;
/

7:pl中的select语句

select empno into v_empno from emp where empno='1001'; --pl中的select语句有且仅能查到一条数据

declare
v_empno emp.empno%type;
v_ename emp.ename%type;
begin
select empno,ename into v_empno,v_ename from emp where empno='1001';
dbms_output.put_line(v_empno || ' ' || v_ename);
end;
/

使用%rowtype放一条记录
declare
v_emps emp%rowtype;
begin
select * into v_emps from emp where empno=1001;
dbms_output.put_line(v_emps.empno || ' '||v_emps.ename ||' '||v_emps.sal);
end;
/

8:pl sql中的dml语句

向表中插入数据:
declare
v_empno emp.empno%type :=1006;
v_ename emp.ename%type :='markson';
begin
insert into emp (empno,ename) values(v_empno,v_ename);
commit;
end;
/

更新表中的数据
declare
v_deptno emp.deptno%type;
begin
v_deptno := 10;
update emp set sal=sal/2 where deptno=v_deptno;
dbms_output.put_line('影响了'||sql%rowcount||'条记录!');
commit;
end;
/

sql%rowcount :sql是一个关键字,rowcount表示执行上一条语句产生多少影响。

9:pl sql中ddl语言
在执行语句前面加上 execute immediate,然后create语句放在单引号内,如果单引号内有单引号,
那么使用双引号来代替单引号。
begin
execute immediate 'create table T(id number(4), name varchar(20) not null)';
end;

10:pl sql中的分支结构if elsif else

declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=1001;
if(v_sal<=1000) then
dbms_output.put_line('low');
elsif(v_sal<=2000) then
dbms_output.put_line('middle');
else
dbms_output.put_line('high');
end if;
end;
/

11:pl sql中的循环结构
pl sql中的循环必须以loop开始,以end loop结束
相当于java中的do... while 结构
先循环再判断:
declare
i binary_integer :=1;
begin
loop
dbms_output.put_line(i);
i :=i+1;
exit when(i>=11);
end loop;
end;
/

相当于java中的while结构,先判断,在循环:
declare
i binary_integer :=1;
begin
while(i<11) loop
dbms_output.put_line(i);
i :=i+1;
end loop;
end;
/

for循环:相当于java中的forhance循环,可以正序,也可以倒序:

declare
i binary_integer :=1;
begin
for k in 1..10 loop
dbms_output.put_line(k);
end loop;

for k in reverse 1..10 loop
dbms_output.put_line(k);
end loop;
end;
/

cursor:游标
recursion:递归
drigger:触发器

oracle学习总结4的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. Oracle学习线路

    出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)    作为oracle的基本功,需要大家对sql和 ...

  3. Oracle学习指南

    Oracle学习指南 你走的那天,我决定不落泪,迎着风撑着眼帘用力不眨眼 创建数据库.创建用户.创建表空间.创建表.插入数据..... 1.用系统用户登录,任选系统用户 代码: >>sql ...

  4. Oracle学习系列1-7

    Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...

  5. Oracle学习系列7

    Oracle学习系列7 ************************************************************************************ 关联表 ...

  6. Oracle学习系列6

    Oracle学习系列6 ************************************************************************************ 删除约 ...

  7. Oracle学习系列5

    Oracle学习系列5 ************************************************************************************ ,掌握 ...

  8. Oracle学习系列4

    Oracle学习系列4 ************************************************************************************ 数据库 ...

  9. Oracle学习系列3

    Oracle学习系列3 ************************************************************************************ 多表查 ...

  10. oracle学习笔记(一)用户管理

    --oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...

随机推荐

  1. 第一个GTK+程序

    在这一章节中,我们将开始编写第一个GTK+程序. 超级简单的例子 我们要“制造”一个超级简单的GTK+程序.就是显示一个空白的窗口. #include <gtk/gtk.h> int ma ...

  2. python学习之optparse

    Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大 ...

  3. [转]Hadoop YARN任务提交流程

    Yarn是随着hadoop发展而催生的新框架,全称是Yet Another Resource Negotiator,可以翻译为“另一个资源管理器”.yarn取代了以前hadoop中jobtracker ...

  4. 【转载】gcc和g++的区别

    [说明]本文转载自 静心 的文章 http://blog.163.com/lu_jun520/blog/static/5699613420116205148239/ 一般linux系统都自带了gcc编 ...

  5. ubuntu openstack spice

    Openstack启用spice协议 #控制节点 #安装 ? 1 apt-get install nova-spiceproxy spice-html5 spice-vdagent #配置 nano ...

  6. python 定制类

    看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让cla ...

  7. 【P3O是什么】P3O认证之项目组合、项目群和项目办公室

    如何区分项目组合办公室与项目群和项目办公室? P3O®(Portfolio,Programmed and Project Offices-项目组合.项目群和项目办公室)是由英国商务部 OGC 于200 ...

  8. docker——Dockerfile创建镜像

    写在前面: 继续docker的学习,昨天用docker成功跑了tomcat,但是在centos中镜像跑的容器手动装jdk和tomcat,今天学习用Dockerfile创建镜像,并在上面搭建java环境 ...

  9. 【Stage3D学习笔记续】山寨Starling(三):Starling核心渲染流程

    这篇文章我们剔除Starling的Touch事件体系和动画体系,专门来看看Starling中的渲染流程实现,以及其搭建的显示列表结构. 由于Starling是模仿Flash的原生显示列表,所以我们可以 ...

  10. iOS开发-网络-合理封装请求接口

    概述 如今大多App都会与网络打交道,作为开发者,合理的对网络后台请求接口进行封装十分重要.本文要介绍的就是一种常见的采用回调函数(方法)的网络接口封装,也算的是一种构架吧. 这个构架主要的idea是 ...