1、创建数据库表emp
create table EMP
(
EMPNO NUMBER(4) not null,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table EMP
add constraint PK_EMP primary key (EMPNO)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
alter table EMP
add constraint FK_DEPTNO foreign key (DEPTNO)
references DEPT (DEPTNO);
2、存储过程基本格式
CREATE PROCEDURE 存储过程名字
IS
BEGIN
--执行的内容
END 存储过程名字;
3、存储过程:插入数据(无参/有参)
--插入数据(无参)存储过程 emp_insert_proc
create or replace procedure emp_insert_proc
is
begin
INSERT INTO emp VALUES(7779,'Hello Java','SALESMAN',7839,SYSDATE,1800,4000,30);
dbms_output.put_line('添加数据的id: '||'7779');
end emp_insert_proc ;
--执行存储过程 emp_insert_proc
begin
emp_insert_proc;
end;
--插入数据(有参)存储过程 emp_insert_para_proc
create or replace procedure emp_insert_para_proc
(myempno NUMBER,
myename VARCHAR2,
myjob VARCHAR2,
mymgr NUMBER,
mydate DATE,
mysal NUMBER,
mycomm NUMBER,
mydeptno NUMBER)
is
begin
INSERT INTO emp VALUES(myempno,myename,myjob,mymgr,mydate,mysal,mycomm,mydeptno);
dbms_output.put_line('插入数据的id:'||myempno);
end emp_insert_para_proc;
-- 调用插入数据有参存储过程
begin
emp_insert_para_proc(111,'三九','坑爹',7689,SYSDATE,1800,4000,30);
end;
4、存储过程:删除数据
--创建存储过程:按照id删除记录
create or replace procedure emp_del_proc(myemp NUMBER)
is
begin
DELETE FROM emp WHERE empno=myemp;
dbms_output.put_line('被删除的记录的empno='||myemp);
end emp_del_proc;
-- 调用存储过程
begin
-- Test statements here
emp_del_proc(111);
commit;
end;
5、存储过程:修改数据
--更新数据存储过程
--按照id修改名字
create or replace procedure emp_update_proc
(myempno IN NUMBER,
myename IN VARCHAR2
)
is
begin
UPDATE emp SET ename=myename WHERE empno=myempno;
dbms_output.put_line('被修改的数据的myempno='||myempno);
end emp_update_proc;
--调用修改数据存储过程
--按照id修改名字存储过程
begin
emp_update_proc(111,'改后名');
commit;
end;
6、存储过程:查询数据
--创建存储过程:按照id查询单条数据
create or replace procedure emp_selectnamebyid_proc
(myempno in number,myname out varchar2)
is
begin
SELECT ename into myname FROM emp WHERE empno=myempno;
--dbms_output.put_line('被查询的ename='||myname);
end emp_selectnamebyid_proc;
-- 调用 查询存储过程emp_selectnamebyid_proc
declare
-- Local variables here
myname VARCHAR2(50);
begin
-- Test statements here
emp_selectnamebyid_proc(123,myname);
end;
-- 创建存储过程:查询所有的结果(多行用游标显示)
create or replace procedure emp_selectempAll_proc
is
CURSOR sel_emp IS SELECT * FROM emp;--定义游标,该游标指向查询结果
rowresult emp%ROWTYPE;
begin
OPEN sel_emp;--打开游标
LOOP FETCH sel_emp INTO rowresult;--将游标中的值赋给rowresult
EXIT WHEN sel_emp%NOTFOUND;--判断:游标不存在时跳出循环
dbms_output.put_line('员工名ename='||rowresult.ename||', 工资sal='||rowresult.sal);
END LOOP;
CLOSE sel_emp;--关闭游标
end emp_selectempAll_proc ;
-- 调用存储过程:查询所有的结果(多行用游标显示)
begin
emp_selectempall_proc;
end;