Oracle的PL/SQL编程前奏之基础技能实战二

前言:本文主要讲述使用DDL定义表结构,定义主键,添加外键;以及oracle最小运行代码块实现需求;

一>

使用DDL数据定义语言创建员工表,部门表。

员工表中要有工号,中文姓名,英文姓名,别名,年龄,入职日期,部门编号。

部门表中要有部门编号,部门名称,部门经理,部门描述,工号。

张三是理财部的经理,他不属于任何部门;李四是财务部职员;

答案:

-----创建员工表
create table 员工表(
---定义员工表列
工号 INT NOT NULL,
中文姓名 VARCHAR2(20) NOT NULL,
英文姓名 VARCHAR2(20) NULL,
别名 VARCHAR2(20) NULL,
年龄 INT DEFAULT 18,
入职日期 DATE NULL,
部门编号 INT NULL,
----定义员工表主键
CONSTRAINT PK_员工表 PRIMARY KEY(工号)
);
-----创建部门表
SQL> create table 部门表(
  2  ----定义部门表列
  3  部门编号 INT NOT NULL,
  4  部门名称 VARCHAR(50) NULL,
  5  部门经理 INT NOT NULL,
  6  部门描述 VARCHAR(200) NULL,
  7  工号 INT NOT NULL,
  8  ----定义部门表主键
  9  CONSTRAINT PK_部门表 PRIMARY KEY(部门编号)
 10  )
 11  /
Table created
------为员工表添加外键引用
ALTER TABLE 员工表 ADD(CONSTRAINT FK_部门编号 FOREIGN KEY (部门编号) REFERENCES 部门表(部门编号));
------为部门表添加外键引用
ALTER TABLE 部门表 ADD(CONSTRAINT FK_部门经理 FOREIGN KEY (部门经理) REFERENCES 员工表(工号));
INSERT INTO 员工表 VALUES(100,'张三','San Zhang','老三',20,date'2011-01-01',null);
INSERT INTO 员工表 VALUES(101,'张四','Li si','老四',20,date'2011-01-01',100);
INSERT INTO 部门表 VALUES(100,'财务部',100,'理财部',0);
----让张三属于财务部
UPDATE 员工表 SET 部门编号=100 WHERE 工号=100;

总结: 

1>java定义数据:int i=5;   shell中定义数据: CMD="ping -W 2 -c 2"     PL/SQL中定义数据: v_EmpNo int:=102;

2>PL/SQL中使用单引号。

3>定义主键:CONSTRAINT PK_员工表 PRIMARY KEY(工号)

4>添加外键引用:ALTER TABLE 员工表 ADD(CONSTRAINT FK_部门编号 FOREIGN KEY (部门编号) REFERENCES 部门表(部门编号));


二>编写一个PL/SQL程序块将上面创建的员工表中添加一个新的员工。

思路: 首先判断要添加的员工工号是否存在,如果存在,则更新该工号对应的员工的信息,否则添加一个新的员工

答案:

DECLARE
-----在PL/SQL匿名块中定义变量
v_EmpNo INT:=102;
v_ChsName VARCHAR2(20):='王五';
v_EngName VARCHAR2(20):='Wang wu';
v_AlsName Varchar2(20):='老五';
v_Age INT:=28;
v_EnrDate DATE:=date'2011-04-01';
v_DeptNo INT:=100;
BEGIN
-----先更新已存在的记录
update 员工表 set 中文姓名=v_ChsName,英文姓名=v_EngName,别名=v_AlsName,年龄=v_Age,入职日期=v_EnrDate,部门编号=v_DeptNo where 工号=v_EmpNo;
dbms_output.put_line('员工更新成功');
---判断,如果未更新数据,
IF sql%NOTFOUND then 
-----则向员工表中插入记录
insert into 员工表 values(v_EmpNo,v_ChsName,v_EngName,v_AlsName,v_Age,v_EnrDate,v_DeptNo);
dbms_output.put_line('员工插入成功');
end if;
exception
when others then
dbms_output.put_line("插入员工表错误");
END;

总结:

1>包含两条sql语句,即update和insert,同时还包含了变量的声明和if条件语句,最后使用exception来进行异常的处理。