oracle学习总结4
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的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle学习线路
出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验) 作为oracle的基本功,需要大家对sql和 ...
- Oracle学习指南
Oracle学习指南 你走的那天,我决定不落泪,迎着风撑着眼帘用力不眨眼 创建数据库.创建用户.创建表空间.创建表.插入数据..... 1.用系统用户登录,任选系统用户 代码: >>sql ...
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
- Oracle学习系列7
Oracle学习系列7 ************************************************************************************ 关联表 ...
- Oracle学习系列6
Oracle学习系列6 ************************************************************************************ 删除约 ...
- Oracle学习系列5
Oracle学习系列5 ************************************************************************************ ,掌握 ...
- Oracle学习系列4
Oracle学习系列4 ************************************************************************************ 数据库 ...
- Oracle学习系列3
Oracle学习系列3 ************************************************************************************ 多表查 ...
- oracle学习笔记(一)用户管理
--oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...
随机推荐
- HDU 5536 Chip Factory 字典树+贪心
给你n个数,a1....an,求(ai+aj)^ak最大的值,i不等于j不等于k 思路:先建字典树,暴力i,j每次删除他们,然后贪心找k,再恢复i,j,每次和答案取较大的,就是答案,有关异或的貌似很多 ...
- mexopencv问题:Invalid MEX file GLIBCXX_3.4.15 error
参考:http://blog.sina.com.cn/s/blog_74112f030101cmxt.html root@debian-yuliyang:/opt/matlab/sys/os/glnx ...
- Storm因机器断电等,启动supervisor异常
Storm因机器断电等,启动supervisor错误 因机器断电或其他异常导致的supervisor意外终止,再次启动时报错: 2014-08-13 10:36:03 b.s.event [ERROR ...
- [Orchard CMS系列] 创建主题(Writing a new theme)
本文需要对Orchard CMS有基本了解. 开启模块 code generation 创建新的主题工程骨架 Codegen theme MyTheme 创建主题样式 src\Orchard.Web\ ...
- leetcode@ [279]Perfect Squares
https://leetcode.com/problems/perfect-squares/ Given a positive integer n, find the least number of ...
- HDU-4681 String 枚举+DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 题意:给A,B,C三个串,求一个最长的串D,满足D是A和B的subsequence,C是D的su ...
- POJ2411 - Mondriaan's Dream(状态压缩DP)
题目大意 给定一个N*M大小的地板,要求你用1*2大小的砖块把地板铺满,问你有多少种方案? 题解 刚开始时看的是挑战程序设计竞赛上的关于铺砖块问题的讲解,研究一两天楞是没明白它代码是怎么写的,智商捉急 ...
- 使用PHP输出中文JSON字符串
PHP 和 JavaScript 交互其实很方便,PHP 原生也提供了对 JSON 格式的支持.主要包括 JSON 编码和解码两个函数: 代码如下: json_endoce: http://cn.ph ...
- EasyBCD安装CentOS双系统
之前使用CentOS安装过ubuntu,今天安装一次CentOS6.6,要复杂一些,列文备忘. 1.安装EasyBCD,下载CentOS-6.6-x86_64-bin-DVD1.iso.CentOS- ...
- [OC Foundation框架 - 1] 常用结构体
底层封装是使用了typedef定义的结构体 typedef struct _NSString{ xxx xxx } NSString; 1. NSRange 结构体 #注意结构体不是对象 3种定义 ...