#将oracle数据 固定到本地 docker cp lmkoracle123:/u01/app/oracle/oradata C:\Users\Administrator\Desktop\temporacle
# 拖镜像 部署oracle服务 空白服务器 docker run -d --name lmkoracle123 -p 8080:8080 -p 1521:1521 registry.cn-hangzhou.aliyuncs.com/mkmk/ora:12cv2
#还原数据到容器中 docker cp C:\Users\Administrator\Desktop\temporacle lmkoracle123:/u01/app/oracle/oradata
恢复日志
docker logs -f lmkoracle123
实验1
3oracle 常用工具的操作。
(1)EM/OEM 的基本操作和认识。
网址
http://localhost:8080/em 系统管理界面
帐号 system
密码 oracle
http://localhost:8080/apex/ 数据库操作界面
workspace: INTERNAL
user: ADMIN
password: 0Racle$
(2)Net Manager 工具的使用。
Navicat
连接 loacalhost
端口 1521
sid XE
帐号 system
密码 oracle
(3)SQL
#进入容器
docker exec -it lmkoracle123 /bin/bash
#输入oracle账号密码,进去 sqlplus编程
sqlplus
#创建个人表空间 create tablespace student20153442 datafile '/u01/app/oracle/oradata/xe/student20153442.dbf' size 300m;
删除个人表空间
2.利用 SQL*PLUS 创建一个用户 user_<本人学号>,使用第 1 步创建的表空间,授予该用户 RESOURCE 角色、connect 权限
3在表空间中创建 表 CREATE TABLE EMP ( Empno VARCHAR2(30) PRIMARY KEY , Ename VARCHAR2(30), Job VARCHAR2(30), HireDate VARCHAR2(30), Sal VARCHAR2(30), Comm VARCHAR2(30), DeptNo VARCHAR2(30) ); CREATE TABLE Dept ( DeptNo VARCHAR2(30) PRIMARY KEY , Dname VARCHAR2(30), Loc VARCHAR2(30) );
#插入一条数据 INSERT into dept VALUES ('sjztddx','石家庄铁道大学','河北省石家庄北二环')
#创建视图 create view view20153442 as select EMPNO , ENAME , DNAME ,(SAL+COMM) sumsal from EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO
使用视图
创建序列
create sequence sequence20153442 increment by 2 start with 20153442 MAXVALUE 20160000 cycle nocache;
使用序列 select sequence20153442.nextval from dual; insert into dept VALUES (sequence20153442.currval,sequence20153442.currval,sequence20153442.currval); select sequence20153442.nextval from dual; insert into dept VALUES (sequence20153442.currval,sequence20153442.currval,sequence20153442.currval); 查看序列的使用结果 select * from dept;
(三)存储过程的使用 Proc1 内容 create or replace procedure proc1(t_deptno in emp.deptno%type) as jingli1 emp.ename%type :='无'; renshu int; error_nopeople EXCEPTION; t_ename emp.ename%type; t_job emp.job%type; CURSOR c1 is select ename,job from emp where deptno=t_deptno; begin DBMS_OUTPUT.put_line('输入的部门编号= '||t_deptno) ; select ename into jingli1 from emp where job='经理' and deptno=t_deptno; DBMS_OUTPUT.put_line('部门的经理是= '||jingli1) ; select COUNT(*) into renshu from emp where deptno=t_deptno; if renshu=0 then --DBMS_OUTPUT.put_line('该部门没有员工');-- raise error_nopeople; end if; for each_one in c1 loop DBMS_OUTPUT.PUT_LINE('员工名称'||each_one.ename||',员工职位'||each_one.job); end loop; EXCEPTION when error_nopeople then DBMS_OUTPUT.put_line('该部门没有员工'); when NO_DATA_FOUND then DBMS_OUTPUT.put_line('该部门没有员工'); end;
Proc2 内容 CREATE OR REPLACE procedure proc2(t_empno in emp.empno%type) as CURSOR c1 is select * from emp where empno=t_empno; begin for each_one in c1 loop DBMS_OUTPUT.PUT_LINE('员工名称'||each_one.ename||',员工职位'||each_one.job||',员工工资'||each_one.sal||',员工奖金'||each_one.comm); end loop; EXCEPTION when NO_DATA_FOUND then DBMS_OUTPUT.put_line('没有这个员工'); end;
(四)PL/SQL 操作的实现 1.求素数 CREATE OR REPLACE procedure zaosushu as flag1 number :=0; begin for i1 in 2..200 loop flag1:=0; for i2 in 2..15 loop if i1>i2 then if mod(i1,i2)=0 then flag1:=1; end if; end if; end loop; if flag1=0 then DBMS_OUTPUT.PUT_LINE(i1||'是素数'); end if; end loop; end;
2.求和 CREATE OR REPLACE procedure qiuhe as sum1 number :=0; begin for i1 in 1..100 loop sum1:=sum1+i1; end loop; DBMS_OUTPUT.PUT_LINE('1到100的和是'||sum1); end;
实验1 实验2结束。