Oracle 11g零基础入门:从建表到查数的实操指南
简介本资源是《Oracle 11g从入门到精通第二版》配套的完整实例源程序包专为数据库初学者、SQL开发人员及DBA入门者设计旨在通过可运行代码深化对Oracle核心机制的理解与实操能力。压缩包共495个文件涵盖236个SQL脚本.txt、123个编译类文件.class、44个Java源码.java、36个配置与元数据XML文件以及JPG图示、备份脚本.bak、数据泵导出文件.dmp等全面支撑19章内容的学习验证——从基础安装、SQL查询与索引创建到视图/存储过程/触发器开发再到用户权限管理、RMAN备份恢复、分区表与SQL调优等进阶主题。1.21MB轻量级包体便于快速下载与本地部署。目前已有405人学习下载所有脚本均按章节组织命名规范、注释清晰支持开箱即用式验证与调试是系统掌握Oracle 11g体系化知识不可多得的实践载体。1. 别被“Oracle”吓住它其实是个特别守规矩的电子记账本专治数据混乱你有没有过这种经历Excel 表格越用越大改个字段要全表重填多人同时编辑直接覆盖彼此或者公司里销售、库存、财务三套数据对不上月底对账像破案这时候有人提了一句“上 Oracle”你心里一咯噔——这名字听着就高深是不是得先考个证、背三年 SQL、再配个机房其实大可不必。Oracle 11g 就像一个超级升级版的“电子记账本”它不自己写业务比如卖货、发工资但它把所有数据怎么存、谁有权限看、改错后能不能撤回、十个人同时记账会不会乱……这些底层规矩全都定得明明白白、执行得一丝不苟。它不是给程序员造火箭用的而是给业务系统打地基的——你用的进销存软件、医院挂号系统、银行后台背后很可能就是它在稳稳托着。这份《Oracle 11g 从入门到精通第二版》配套的实例源程序就是一本“带手操的说明书”它不讲抽象理论而是从创建第一个表格、插入第一行数据、查出你要的结果开始每一步都有现成代码、每一步都告诉你为什么这么写。零基础的新手只要会双击解压、会复制粘贴、知道“命令行窗口”长什么样就能跟着跑通第一个例子。它不承诺让你三天变专家但能保证三天后你真能自己建库、插数据、写查询不再对着黑窗口发怵。2. 先搞懂一个前提为什么必须用 Oracle 11g 而不是其他版本2.1 它不是“最新版”但恰恰是新手最友好的“稳定黄金版”很多人一看到“11g”就下意识觉得“太老了”赶紧去搜 Oracle 19c 或 23c。这其实是新手最容易踩的第一个认知坑。Oracle 11g 发布于 2007 年但它在数据库教学和企业遗留系统中至今仍是事实上的“标准教材版”。为什么因为它像一辆结构清晰、仪表盘全亮的老款丰田没有太多花哨的自动驾驶新特性但每个按钮在哪、踩油门和刹车的反馈多直接、故障灯亮了代表什么全都一目了然。而更新的版本比如 19c虽然性能更强、支持云部署但默认启用了大量后台自动优化、内存管理策略新手第一次连上去可能连“为什么我刚建的表查不出来”都找不到原因——因为数据其实在缓存里没刷盘或者权限模型变了。11g 的核心语法SELECT/INSERT/UPDATE/DELETE、用户管理CREATE USER、权限控制GRANT/REVOKE、备份恢复EXP/IMP这些最基础、最高频的操作和今天的企业级用法几乎完全一致。你学 11g 学透了转到 19c 只需补几页“新功能速查”而不是重学整个逻辑。这份资料选 11g不是守旧是替你把学习路径拉得最短、最平滑。2.2 “实例源程序”到底是什么它和书里的文字描述有什么不同很多新手下载完这个.rar文件解压看到一堆.sql文件和文件夹有点懵“这不就是些文本吗有啥用” 这里必须划重点它不是书的电子版而是书里所有练习题的“可运行答案”。举个具体例子书里第 3 章讲“如何创建员工信息表”文字会告诉你语法是CREATE TABLE emp (...)然后列一堆字段名和类型。但光看文字你根本不知道字段名empno是不是必须大写VARCHAR2(10)和VARCHAR(10)有啥区别写错了会报什么错如果漏写了主键约束后面插入重复数据时错误提示是哪一行而这份源程序里就有一个叫ch03_create_emp_table.sql的文件里面清清楚楚写着-- 创建员工表注意 empno 是 NUMBER 类型不是 VARCHAR2 CREATE TABLE emp ( empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10) NOT NULL, job VARCHAR2(9), mgr NUMBER(4), hiredate DATE DEFAULT SYSDATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) );你只需要把这段代码复制进 Oracle 的命令行工具SQL*Plus回车执行立刻就能看到Table created.的成功提示。如果哪天手抖把NUMBER(4)写成NUMBER(4,2)执行时马上报错ORA-01727: numeric precision specifier is out of range错误码、错误位置、甚至错误原因精度范围超限都给你标得明明白白。这才是“实例”的价值它把书本上的静态知识变成了你键盘上可触摸、可试错、可验证的活体操作。它不替代看书但它是你合上书后唯一能立刻动手验证理解的“后悔药”。2.3 新手起步前必须确认的三件“硬件”和两件“软件”别急着解压.rar先花 3 分钟检查你的电脑是否已备齐“开工三件套”和“启动两要素”。这不是形式主义是避免你卡在第一步、怀疑自己不适合学的最关键防线。提示以下检查项缺一不可。请逐条确认不要跳过。三件硬件实际是环境要求操作系统兼容性Oracle 11g 官方只支持 Windows 7/8/1064位或 Linux如 CentOS 6/7。如果你用的是 Windows 11 或 macOS官方不直接支持。但好消息是这份资料配套的安装指南通常在docs/或install_guide/目录下明确提供了“Windows 10 兼容补丁包”和“Linux 虚拟机最小配置清单”你按文档操作即可绕过限制。内存底线Oracle 数据库服务OracleServiceORCL启动后至少占用 1GB 内存。如果你的电脑总内存 ≤ 4GB建议关闭所有浏览器、微信等后台程序再启动否则可能卡死。这不是性能差是它“守规矩”——宁可慢一点也不让数据因内存不足而损坏。磁盘空间首次安装 示例数据库通常叫orcl需要约 3.5GB 空间。别小看这个数字它包含数据库文件.dbf、日志文件.log、归档日志.arc三类缺一不可。建议解压.rar前先清出 5GB 以上空闲空间。两件软件必须提前装好Oracle 11g 数据库服务端.rar文件里只有 SQL 脚本没有数据库引擎。你必须先从 Oracle 官网搜索 “Oracle Database 11g Release 2 download”下载winx64_11gR2_database_1of2.zip和winx64_11gR2_database_2of2.zipWindows 版解压后运行setup.exe安装。安装时选择“创建和配置数据库”数据库名SID务必记为orcl这是所有示例脚本默认连接的名称。SQL*Plus 命令行工具它随服务端一起安装路径通常是C:\app\你的用户名\product\11.2.0\dbhome_1\bin\sqlplus.exe。别用第三方图形化工具如 PL/SQL Developer起步它们封装太多掩盖了底层交互细节新手反而更难定位问题。2.4 第一个实操用 5 分钟跑通“创建员工表”示例现在我们真正动手。目标把书里第 3 章的emp表在你自己的电脑上建出来并插入一条测试数据。全程不需要任何额外配置只用自带工具。步骤 1启动 SQL*Plus连上你的数据库按WinR输入cmd回车打开命令提示符。输入以下命令注意替换your_password为你安装时设置的SYSTEM用户密码sqlplus /nolog你会看到SQL提示符。接着输入CONNECT SYSTEM/your_passwordlocalhost:1521/orcl如果看到Connected.说明成功连上本地数据库。如果报错ORA-12154: TNS:could not resolve the connect identifier大概率是 SID 名没设成orcl请回看 2.3 节的安装提醒。步骤 2执行第一个 SQL 脚本假设你把.rar解压到了D:\oracle11g_examples\那么ch03_create_emp_table.sql的完整路径是D:\oracle11g_examples\ch03\ch03_create_emp_table.sql。在 SQL*Plus 里输入D:\oracle11g_examples\ch03\ch03_create_emp_table.sql注意符号是 SQL*Plus 的“执行外部脚本”命令不能省略。回车后你会看到一串输出最后一行是Table created.。步骤 3验证结果——查出你刚建的表输入以下查询语句这是 Oracle 最基础的“看数据”命令SELECT table_name FROM user_tables WHERE table_name EMP;如果返回一行EMP恭喜表已成功创建此时你已经完成了 Oracle 学习的第一步从零到“能建表”。为什么这一步如此关键因为它帮你建立了最朴素的信心数据库不是黑匣子它的行为是确定的、可预测的。你输入CREATE TABLE它就建表你输错语法它就报具体错误码你查user_tables它就返回真实存在的表名。这种“所见即所得”的反馈是新手坚持下去的最大动力。很多教程失败不是因为内容难而是卡在第一步连不上、建不了表人就放弃了。3. 避坑指南新手必踩的 5 个“血泪坑”附带一键修复法3.1 现象执行xxx.sql时报错SP2-0310: unable to open file xxx.sql原因SQLPlus 默认在当前工作目录下找文件。如果你在C:\Users\Name下启动 SQLPlus它就会去C:\Users\Name\找xxx.sql而你的脚本实际在D:\oracle11g_examples\。路径不匹配自然打不开。解决两种方法任选其一推荐法一劳永逸启动 SQL*Plus 前先用cd命令切换到脚本所在目录。例如cd D:\oracle11g_examples\ch03\ sqlplus /nolog CONNECT SYSTEM/your_passwordlocalhost:1521/orcl ch03_create_emp_table.sql快捷法临时应急在 SQL*Plus 里用DEFINE _EDITOR设置编辑器路径非必需但不如第一种直接。3.2 现象插入数据时报错ORA-01400: cannot insert NULL into (SCOTT.EMP.EMPNO)原因empno字段定义了PRIMARY KEY主键意味着它既不能为 NULL也不能重复。但你在INSERT语句里没给empno赋值或者赋了空字符串Oracle 就把它当 NULL 处理。解决检查你的INSERT语句。正确写法必须显式指定empno值INSERT INTO emp (empno, ename, job, hiredate, sal, deptno) VALUES (7369, SMITH, CLERK, DATE 1980-12-17, 800, 20);注意DATE 1980-12-17是 Oracle 标准日期字面量写法不能写成1980-12-17那是字符串类型不匹配。3.3 现象查询SELECT * FROM emp;时报错ORA-00942: table or view does not exist原因表确实存在但你当前登录的用户如SYSTEM没有权限查看SCOTT用户下的EMP表。Oracle 11g 的示例数据EMP,DEPT等默认属于SCOTT用户而SCOTT账户在安装后是锁定的。解决用SYSTEM用户解锁SCOTT并授权-- 先解锁 SCOTT 用户 ALTER USER scott ACCOUNT UNLOCK; -- 设置 SCOTT 密码比如设为 tiger ALTER USER scott IDENTIFIED BY tiger; -- 给 SCOTT 授权让它能连数据库 GRANT CONNECT, RESOURCE TO scott; -- 可选让 SYSTEM 能查 SCOTT 的表 GRANT SELECT ON scott.emp TO system;然后重新连接CONNECT scott/tigerlocalhost:1521/orcl再执行SELECT * FROM emp;。3.4 现象SQL*Plus 窗口一片空白敲命令没反应或中文显示为问号?原因Windows 控制台默认编码是 GBK而 Oracle 11g 客户端期望 UTF-8。字符集不匹配导致命令无法识别或中文乱码。解决在启动 SQL*Plus 前强制设置环境变量chcp 65001 sqlplus /nologchcp 65001是将控制台切换到 UTF-8 编码的命令。执行后再连数据库中文注释和提示就能正常显示。3.5 现象执行完CREATE TABLE后用SELECT查不到数据但DESC emp能看到表结构原因你创建了表但还没往里插数据CREATE TABLE只是画好了表格的“空架子”就像买了个新 Excel 文件但里面还是空的。新手常误以为“建表有数据”。解决立刻执行配套的插入脚本。这份资料里每个建表脚本如ch03_create_emp_table.sql旁边一定有对应的ch03_insert_emp_data.sql。找到它用命令执行即可D:\oracle11g_examples\ch03\ch03_insert_emp_data.sql执行后再SELECT * FROM emp;就能看到 14 行经典示例数据了。4. 从“能建表”到“能查数”掌握三个最常用查询搞定 80% 日常需求4.1 第一个查询SELECT * FROM emp;—— 认识“全表扫描”的威力与代价这是你学会的第一个查询也是最危险的一个。*表示“查所有字段”FROM emp表示“从 emp 表里查”。它简单粗暴适合初学时快速看数据。但请记住在真实业务中永远不要在生产环境无条件用SELECT *。为什么因为emp表只有 8 个字段但假如某天它扩展到 50 个字段其中包含BLOB大文件类型你SELECT *一次就要把整张表所有字段、所有行的数据从硬盘读到内存网络传输量暴增服务器瞬间卡死。所以从现在起养成习惯只查你需要的字段。比如只想看员工姓名和工资就写SELECT ename, sal FROM emp;这样 Oracle 只读取ename和sal两个字段效率提升数倍。这是你作为数据使用者对系统最基本的尊重。4.2 第二个查询SELECT * FROM emp WHERE deptno 20;—— 理解“过滤”的本质是“缩小范围”WHERE子句是 Oracle 的“筛子”。deptno 20这个条件告诉 Oracle“别查全表只查部门编号等于 20 的那些行”。这背后是索引Index在发力——如果deptno字段上有索引Oracle 就不用扫全表而是直接跳到deptno20对应的数据块毫秒级返回结果。你可以验证先执行SELECT * FROM emp;查全部 14 行再执行SELECT * FROM emp WHERE deptno 20;查 5 行观察返回行数和速度差异。这就是“过滤”的价值它把大海捞针变成在指定鱼缸里找鱼。后续学索引时你会明白WHERE条件的字段就是未来建索引的首选目标。4.3 第三个查询SELECT ename, sal, sal*12 AS annual_sal FROM emp ORDER BY sal DESC;—— 学会“计算”和“排序”两个魔法这一行包含了三个关键能力sal*12 AS annual_sal计算字段。Oracle 允许你在SELECT里做四则运算AS是给计算结果起个临时名字别名方便阅读。这里把月薪sal乘以 12得到年薪annual_sal。ORDER BY sal DESC排序。DESC是降序从高到低ASC升序可省略。它让结果按工资从高到低排列一眼看出谁是高薪员工。组合起来这条语句就完成了“算年薪、排高低”的完整分析。你可以立刻试试SELECT ename, sal, sal*12 AS annual_sal FROM emp ORDER BY sal DESC;结果会显示KING5000排第一SMITH800排最后。这就是数据分析的雏形从原始数据生成业务洞察。4.4 关键参数说明WHERE、ORDER BY、AS的使用边界关键字作用必须位置常见错误正确示范WHERE过滤行记录SELECT ... FROM table之后ORDER BY之前在SELECT前写WHERE用比较字符串时不加单引号WHERE job CLERK字符串必须加单引号ORDER BY排序结果整个语句最后对计算字段排序时不写别名多个字段排序不加逗号ORDER BY sal DESC, ename ASC先按工资降序工资相同时按姓名升序AS定义列别名SELECT子句中字段表达式后给中文别名不加双引号在WHERE中引用别名SELECT sal*12 AS 年薪 FROM emp中文别名必须用双引号注意WHERE里不能用AS定义的别名比如SELECT sal*12 AS annual_sal FROM emp WHERE annual_sal 10000是错的。因为WHERE执行时annual_sal这个别名还没诞生SELECT还没执行完。正确写法是WHERE sal*12 10000。这是新手百试不爽的翻车点务必牢记。5. 下一步学什么一张表规划你的 Oracle 实战进阶路径学到这里你已经能连库、建表、插数据、查数据、过滤、排序、计算字段——这已经是很多初级数据岗、运维岗的日常操作水平。但别停真正的“精通”在于把零散技能串成解决实际问题的链条。下面这张表是我当年跟着这份资料一步步走过来的实战路径每一步都对应资料里的一个章节和配套脚本绝不虚构阶段目标关键技能对应资料章节你能独立完成的任务我当时的血泪经验阶段 1稳住基本盘确保每次操作都可复现、可回退COMMIT/ROLLBACK事务控制SAVEPOINT设置还原点第 5 章 “数据完整性与事务”执行一批INSERT后发现第三条错了用ROLLBACK TO sp1撤回到第二条之后再重做第一次没加COMMIT关掉 SQL*Plus 后数据全丢了重插了半小时。从此养成了“改完数据立刻COMMIT”的习惯阶段 2连接多张表把分散在不同表里的信息拼成一张视图JOIN内连接、左连接ON关联条件USING简化写法第 7 章 “多表查询”查出“每个员工的姓名、部门名称、工资”数据来自emp和dept两张表用WHERE emp.deptno dept.deptno写连接结果查出笛卡尔积14×456 行才发现漏了AND条件。后来强制自己写JOIN必先画 ER 图阶段 3自动化重复操作把手动执行的 SQL 变成一键脚本SPOOL导出查询结果到文件批量执行脚本PROMPT输出提示第 10 章 “SQL*Plus 高级技巧”写一个monthly_report.sql自动查出本月所有员工工资汇总导出为report.txt曾把SPOOL report.txt和SPOOL OFF写反了顺序结果所有SELECT结果都堆在report.txt里还删不掉。现在写脚本第一行必是SPOOL OFF清场阶段 4守住数据生命线确保数据不丢、不乱、能恢复EXP导出和IMP导入逻辑备份RMAN物理备份概念第 12 章 “数据库备份与恢复”用EXP把scott用户下的所有表导出为scott.dmp再用IMP导入到新库第一次IMP时没加FULLY只导了表结构没导数据恢复后全是空表。现在备份前必先SELECT COUNT(*) FROM user_tables记下表数恢复后立刻核对从那以后我每次写重要 SQL都强制走一遍“三步验证”先SELECT验证条件比如WHERE deptno20是否真有数据再UPDATE/DELETE加AND ROWNUM 10限制影响行数防止误操作全表最后COMMIT前用SELECT再查一遍结果眼见为实。这套流程看起来慢但省下了无数次重装数据库、求同事救急的时间。希望帮到你。本文还有配套的精品资源点击获取