ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PL/SQL Developer 11实用指南:从连接配置到调试导出避坑

PL/SQL Developer 11实用指南:从连接配置到调试导出避坑 简介PL/SQL Developer 11 中文手册是一份面向 Oracle 数据库开发者的用户指南适合需要系统掌握 PL/SQL 开发、调试与维护技能的开发人员和 DBA。手册从工具介绍和安装方法讲起说明系统需求以及工作站、服务器、脚本等部署方式随后讲解登录数据库并围绕程序编写详细展开创建、保存、修改、编译与对比等操作再介绍测试脚本、变量类型、运行时错误跟踪、包状态查看和结果集浏览等测试环节同时涵盖优化和专用 SQL 等进阶主题。整份手册以中文编写步骤清晰配有完整目录压缩包内为单个 PDF 文件大小约 5.5MB方便离线查阅。目前已有 1870 人学习下载无论是刚接触 PL/SQL 的入门者还是希望查阅功能细节的资深用户都能从中获得实用帮助。1. 拿到这份中文手册先别急着从头翻很多人在本地装上 plsql developer 11 之后做的第一件事是双击打开那份中文手册 PDF从第一章“什么是 PL/SQL Developer”开始看。我看到过太多次这样的开场结果都是同一种看了二十页关掉手册回到工具里还是不知道该点哪里。这份手册真正该被当成的东西是一张带索引的作战地图不是一本从头读到尾的教材。它要解决的问题不是“ORACLE 是什么”而是“我要连库、写一段 PL/SQL、把结果导给业务同事这几个动作在 plsql developer 里分别走哪条路径、哪些参数默认值会坑到我”。适合这样用这份手册的人有两类。一类是刚接手 Oracle 维护工作、之前只在 MySQL 或 SQL Server 里写过 SQL 的开发他们需要快速知道窗口布局、执行方式、调试入口在哪儿另一类是已经把 plsql developer 当日常工具的熟手他们翻它通常是为了查某个导出场景的字符集设置、或某个调试功能的前置授权要求。这篇文章就是按这个思路来写的手册里最值钱的部分不是介绍而是连接、编辑、调试、导出这四条主线外加一份用血泪经验换来的避坑清单。读完你可以不翻手册就完成日常工作也能在出问题的时候精确知道去手册的哪个章节找答案。2. 用 plsql developer 11 连上库连接配置与最小验证2.1 先搞清楚窗口布局再谈连接plsql developer 11 装完第一次打开会弹出一个登录框让你输 Username、Password、Database。很多新手会在这一步卡住因为 Database 这一栏既可以用 TNS 别名也可以直接填一长串连接描述到底填什么取决于你的 Oracle 客户端怎么配的。在输入任何东西之前先确认三件事本机装的是完整 Oracle Client 还是 Instant Client有没有配置 tnsnames.ora数据库服务器允许哪种方式访问。登录进去之后界面会同时出现好几个窗口刚上手的人很容易懵。最常见的布局是左侧的 Object Browser对象浏览器右侧当前打开着的 SQL Window最下方的 Log 窗口以及菜单栏下面的一排小图标。这份中文手册的目录里通常会把“窗口类型”和“首选项设置”放在前面几章但我的建议是先直接去建立一个到库的连接让会话先跑起来再回头逐个点开这些窗口看它们各自在什么场景下有用。Object Browser 在 11 里能做的事很多查表结构、看索引、浏览存储过程源码都在这一侧完成它默认是停靠在整个界面的左边如果你不小心把它关了在 View 菜单里可以找回来。连接串的配置常见做法有两种我一般会这样区分能改 tnsnames.ora 的环境优先用 TNS 别名因为多个工具共享一份配置排查问题的时候口径统一只给自己本机用、不想动客户端配置的场合直接填直连串更省事。下表是两者的典型配置对比连接方式Database 栏填的内容适用场景TNS 别名ORCL只要别名不带斜杠团队共用一个 Oracle Client别名统一维护直连串:1521/orcl 格式为 host:port/service_name临时连接、一次性排查、不想改 tnsnames.ora注意直连串在老版本 plsql developer 上对 SID 和 Service Name 的处理不完全一样。如果你填的是 SID 形式用的是:1521:ORCL这种写法而 service_name 形式是:1521/ORCL。两者连的是同一个实例但写法混用会导致 ORA-12505 或 ORA-12514。手册的连接章节通常把 tnsnames.ora 的条目格式讲得很详细但直连串这个写法反而容易被忽略。2.2 字符集参数不在这里花五分钟后面乱码花五小时连接能通只是第一步。真正让新手第一次产生“这工具怎么这么难用”想法的是连上之后查出来的一列中文全是问号。这个锅八成在 NLS_LANG 环境变量或注册表值上。Oracle 客户端读取数据的显示字符集不是由 plsql developer 自己决定的而是由 Oracle 客户端的 NLS_LANG 决定的。plsql developer 11 本身是一个运行在 Windows 上的应用程序它会把客户端字符集设置传给 Oracle 会话。常见的配置方式是在 Windows 注册表里找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_你的客户端名把 NLS_LANG 设置成SIMPLIFIED CHINESE_CHINA.AL32UTF8或ZHS16GBK具体选哪个看数据库的字符集。如果数据库是 AL32UTF8客户端也写 AL32UTF8是最不容易出错的组合。这里有个玄学点NLS_LANG 里的语言部分其实只影响提示消息真正影响字符集转换的是第三段。很多人照着网上的帖子把 NLS_LANG 改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK在本机看着正常但和库里的 UTF8 数据一交互就出乱码。我判断字符集设置是否正确一般不看网上的教程而是先做最小验证。登录 plsql developer 后在命令窗口执行这行SELECT USERENV(LANGUAGE) FROM DUAL;输出的内容分为三节关注最后一节。比如输出是SIMPLIFIED CHINESE_CHINA.AL32UTF8说明当前会话用的是 AL32UTF8。然后我再执行一句带中文条件的最简单查询比如SELECT 中文测试 FROM DUAL观察返回是否正常。两个验证都过了再开始正式工作。这一步在中文手册的“故障排除”或“字符集”章节里通常有对应说明但容易被当成环境配置一笔带过实际它决定了后面所有操作的体验。2.3 最小可用连接的三步自检建立一个能安稳工作的连接我认为至少应该做到三步自检都通过。第一步登录不报错。登录窗体能正常走上登录流程而不是卡在“正在连接”然后超时。第二步能执行最简单的单行查询。在 SQL Window 里输入SELECT SYSDATE FROM DUAL按 F8能正常返回当前时间。第三步能查出一行带中文的真实业务数据。比如从一张字典表里取一条记录确认中文显示正常。三步都过了连接这件事才算真正完成。连接超时这块值得多说一句。Oracle 11g 默认的会话空闲超时设置一般不会在测试时立刻暴露但 plsql developer 的连接池和会话保持机制依赖于客户端的 sqlnet.ora 里的 SQLNET.EXPIRE_TIME 参数。如果你早上打开工具中午回来执行第一条语句报 ORA-03113 或 ORA-03135基本可以判定是网络层的空闲连接被防火墙或数据库端断开了。解决方式是在 sqlnet.ora 里设置一个合理的过期探测间隔我一般设置 10 分钟。这个问题手册未必直说但属于用一段时间后必然撞见的场景。3. SQL Window 与 PL/SQL 开发把手册里的窗口功能变成日常动作3.1 SQL Window 的三个默认参数先改再写真正天天打交道的地方是 SQL Window。很多从 Toad 或 Navicat 转过来的人第一次打开 plsql developer 的 SQL Window会惊讶它默认连行号都不太显眼、执行计划入口也藏在工具栏里。但用顺手之后你会发现它有几个别人替代不了的优势对 PL/SQL 对象的感知非常原生跟在 SQL*Plus 里写的习惯几乎一致。我建议拿到手先做三件事都在 Preferences首选项里。第一把 SQL Window 里的 “Show gutter”显示边距打开这样调试时可以直观看到断点位置。第二把 “Auto select” 关掉。这个选项如果开着F8 执行时会自动选中当前光标所在的语句听起来方便实际在脚本里有多条语句时经常误执行——你想跑第二条它把第一条也带上了。第三找到 “Statement” 相关的缩进和大小写设置按你团队的编码规范调好这直接关系到后面用 Beautifier 格式化时的输出结果。执行方式这里必须说清楚F8 是运行当前光标处或选中区域的 SQL。如果你选中了一整段F8 只运行选中部分没有选中时运行光标所在的那条语句而不是整个窗口里的全部脚本。这个行为新手至少要踩三次冤枉路才能记住。手册里对“执行”这个动作的讲解往往分散在多个地方有讲 F8 的、有讲 Execute 按钮的、有讲 Test Window 里执行存储过程的我建议你把 F8 这一个键先形成肌肉记忆。在 SQL Window 里写匿名块也很常用DECLARE v_cnt NUMBER; BEGIN SELECT COUNT(*) INTO v_cnt FROM user_tables; DBMS_OUTPUT.PUT_LINE(当前用户下表的数量: || v_cnt); END;写完先按 F8然后看下方的 Output 或 DBMS_OUTPUT 窗口有没有输出。注意一个常见坑如果看不到 PUT_LINE 的输出去菜单里打开 View - DBMS_OUTPUT或者确认窗口是否已经被启用。DBMS_OUTPUT 窗口需要手动打开一次它不是一个默认常驻的输出栏而且 11 版本的默认 buffer 大小有限输出内容超过 10000 字节会截断避免一次打印过长的文本。执行逻辑其实很简单这是一个匿名 PL/SQL 块DECLARE 声明变量BEGIN..END 里写业务逻辑DBMS_OUTPUT 负责把结果打到客户端。测试窗口本质上也是在跑这种块只是它额外帮你生成了调用存储过程的模板。3.2 调试存储过程不是 F8 就能跑的调试是 plsql developer 11 拉开和普通 SQL 客户端差距的核心功能但也是翻车重灾区。在 Object Browser 里找到你的存储过程右键选择 Test会打开一个测试窗口里面自动生成了调用脚本。很多人习惯直接在这里按 F8结果发现它只是把这个过程跑了一遍没有进入单步调试状态断点也压根没停过。原因是这样plsql developer 的调试器需要两个前置条件。第一当前连接的用户需要有 DEBUG CONNECT SESSION 和 DEBUG ANY PROCEDURE 权限缺一个工具栏上的调试按钮就是灰色的。第二被调试的对象需要以 debug 模式编译。在 Object Browser 里选中存储过程右键依次找到 Compile 相关的菜单里面会有一个带 Debug 字样的编译选项没有用调试模式重新编译过的对象调试器对它是无效的。两个条件都满足后测试窗口里点击那些“Step Into”、“Step Over”图标才会真正进入单步执行。调试窗口的布局也容易劝退新手上方是源码左边是断点列表下方是变量监视区域。在源码区点击行号旁的空隙可以打断点断点行会高亮。执行到断点停住后把鼠标悬停在变量名上可以直接看到当前值。不过这里有 11 版本一个教科书级的坑如果你修改了存储过程的源码但没有重新编译调试器执行的行号和实际代码行号是错位的。你会看到断点打在第五行高亮却停在第三行。这种情况下第一反应别去怀疑调试器坏了回到 Object Browser 里重新编译一次。3.3 PL/SQL Beautifier格式化前先备份规则要按团队来Beautifier 是 plsql developer 里最容易被忽略却又非常实用的功能。选中一段乱七八糟的 SQL 或 PL/SQL点击 Beautify 按钮或快捷键缩进、大小写、换行会按预设规则重排。中文手册里通常会把它放在“编辑器”相关章节但它值得你额外花时间。原因有两个。一是默认规则未必是你团队的规范。比如有的人习惯关键字大写默认规则可能是全小写有的人习惯一行一个参数默认可能收缩成一行。第一次用 Beautifier 前先打开它的配置界面把关键字大小写、缩进宽度、每行最大长度这几项按你团队的约定设好再保存为一份自己的 profile。二是 Beautifier 对注释的处理有风险。它不会删除注释但会把注释的重排弄得很别扭尤其是写在语句中间的行尾注释。我这里有一条血泪经验格式化一整个 package 源码之前手动备份原文件或先建一个同名的临时对象因为 Beautifier 在极少数边界情况下会把缩进和括号匹配搞出不符合预期的结果而 redo 机制对源码窗口的恢复能力有限。也就是一个 CtrlZ 解决不了的问题你先备份就永远有后悔药。4. 结果集窗口与数据导出把查询结果变成业务同事要的文件4.1 结果集里直接改数据比重新写 update 稳执行一条 SELECT 之后plsql developer 的结果集窗口会以表格形式返回数据。这个窗口看起来简单内藏两个高频能力。一个是点列头可以对结果集临时排序注意这个排序只是客户端视觉上的排序不改变 SQL 本身也不会往数据库发任何指令。另一个是直接编辑单元格这在 11 版本里是一个被严重低估的生产力功能当你查到一行数据需要立刻修改时直接在结果集窗口的单元格里点两下改完点窗口上方某个提交按钮客户端会帮你生成对应的 update 语句并执行。它比手动打开一个 SQL 窗口写 update 要安全得多因为where 条件是基于主键或 rowid 生成的不会出现漏加 where 条件把整表改了的事故。但用这个功能有一个前提查询语句里必须能追踪到行标识。如果 SELECT 出来的列来自多表联查或者使用了聚合函数、去重结果集就可能是只读的单元格无法进入编辑状态。手册里把这个功能叫 Edit Data 还是 Grid Edit版本不同命名不同它的入口不在 Preferences 里而是在结果集窗口的右键菜单里。还有一个细节改完数据后不点提交直接关窗口plsql developer 会弹出提示问你是否保存。这里别习惯性点“否”否则刚才的修改全部作废且没有任何确认提示。4.2 导出 Excel 和 CSV乱码、格式、大结果集三个关键点业务同事经常会要求把查询结果导出成 Excel 或 CSV。plsql developer 11 的导出入口是在结果集窗口右键选择 Export Results 相关的菜单项它支持导出为 Text也就是 CSV、Excel、HTML 等格式。三种格式里最常用的是 Excel 和 CSV踩坑点各不相同。CSV 导出的头号问题是中文乱码。Excel 打开 CSV 用的是系统默认编码如果 plsql developer 导出 CSV 时用的是 UTF-8Excel 可能用 GBK 去解码于是看到一堆乱码。我一般会在导出后在文本编辑器里确认文件头有没有 BOM。没有 BOM 的 UTF-8 CSV老版本 Excel 打开时很容易乱码。解决方式有几个一个是导出时选合适的字符集另一个是导出后用文本工具做一次编码转换转成 GBK 再发给业务。Excel 导出的问题有两个。第一个是 11 版本导出的 Excel 是老格式 .xls超过 65536 行的结果集会直接失败或截断。查询可能返回几十万行这时要么改成 CSV要么让业务自己在 Excel 里用数据连接去拉。第二个是导出后的日期字段显示为数字串。这是老版本 ODBC/Excel 交互的经典坑解决办法是在 SQL 里先把日期转成字符比如TO_CHAR(create_date, YYYY-MM-DD HH24:MI:SS)导出后就正常了。上万行的结果集导出还涉及一个体验问题默认的抓取行数可能只有几百行你在结果集窗口看到的只是“已加载的部分”拖到最底部需要等它继续抓取下一批。在 Preferences 里把 Max rows fetched 调大能让结果集窗口一次性多拉一些数据。我在需要整表导出时会把它从默认值调到 50000 甚至更高。这个参数不是设得越大越好因为 plsql developer 11 是 32 位进程抓取太多数据进内存会导致界面卡顿甚至窗口无响应日常查询保持一个够用的值就好。4.3 查询构建器适合不常写 SQL 的人但不适合复杂查询查询构建器Query Builder是给不太熟悉 SQL 语法的人设计的一个可视化工具可以从左侧把表拖进工作区勾选列、设置关联条件自动生成查询。这个功能在小表、三四张表以内联查时效率很高至少不会写错表名字段名。但它有两个明显边界一是复杂子查询基本无能为力你没法在构建器里准确表达嵌套查询二是生成出来的 SQL 往往不够优化比如在需要 EXISTS 的场景用了 IN。所以我一般建议纯新手可以用它入门正式生产环境的查询还是回到 SQL Window 手写。工具再可视化也替代不了对 SQL 本身的理解。5. 新手必踩的六个坑现象、原因、解决办法5.1 登录报 ORA-12154TNS 无法解析指定的连接标识符现象登录框填好用户名密码后点 Connect 立刻报 ORA-12154: TNS:could not resolve the connect identifier specified。原因plsql developer 在你填的 Database 栏里收到了一个数据库别名但在 tnsnames.ora 里找不到这个别名。常见诱因有两个tnsnames.ora 文件里的别名写错了或者 plsql developer 加载的根本不是你改的那份 tnsnames.ora。注意后一种情况非常隐蔽——本机装了多个 Oracle 客户端plsql developer 用的是其中某一个的 TNS 配置你改了另一个客户端的文件自然无效。解决在登录框先不急着输密码在 Database 栏的下拉列表里看有没有列出你想要的别名。如果下拉列表能看到说明 TNS 解析路径是对的看不到就要确认 plsql developer 实际使用的 ORACLE_HOME 指向哪里。在 Windows 环境变量里检查 TNS_ADMIN如果没设默认看注册表里的 ORACLE_HOME 下的 network/admin。找到真正的 tnsnames.ora 后修改或新增别名保存后重开登录框不需要重启 plsql developer。5.2 查询中文显示成问号或乱码现象查出来的中文内容显示为一串 ?或者是一些毫无规律的特殊字符。原因NLS_LANG 和数据库字符集不匹配。简单说数据库里的字节是按某种字符集编码存着的客户端告诉 Oracle “我这边按另一种字符集来理解”两边没有对齐结果就是乱码。解决执行SELECT USERENV(LANGUAGE) FROM DUAL看当前会话的字符集再查数据库端配置比如SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETERNLS_CHARACTERSET。然后调整客户端 NLS_LANG 成为一致的状态。绝大多数情况下改成和数据库相同就正常了。改完注册表或环境变量后需要退出 plsql developer 重新登录才生效。另外测一下现有乱码数据如果改完之后历史的乱码数据还是乱码说明数据本身在入库时就已经写坏了这时候怎么调客户端都救不回来只能从源头修正数据。5.3 调试按钮灰色点不了现象打开存储过程的 Test 窗口工具条上的 Start / Step Into 等调试按钮全部是灰色不可点击状态。原因两个前提没满足。一是当前数据库用户缺少调试权限GRANT DEBUG CONNECT SESSION TO 用户名和GRANT DEBUG ANY PROCEDURE TO 用户名至少其中一个没给。二是存储过程没有以 debug 模式编译过。解决DBA 先给用户授调试权限然后在 Object Browser 里选中这个存储过程右键找到 Compile 相关的子菜单选择带 Debug 的编译选项。两个搞定后关掉测试窗口重开一次按钮就能用了。这里有一个干扰项Test Window 本身也可以执行调用只是执行不等于调试所以按钮灰色时别纠结是不是窗口坏了按上面两步排查。5.4 执行 F8 跑到不想跑的语句现象脚本里写了两条 SQL光标停在第二条上按 F8结果第一条也被执行了或者执行的不是自己心里想的那条。原因F8 的行为取决于有没有选中内容以及当前编辑器的配置。如果光标所在之处被自动选中了整段内容或者 Preferences 里的 “Auto select” 开着执行范围就不是“光标所在语句”而是“当前选中区域”。解决手动把要执行的语句用鼠标选中再按 F8这种操作方式在任何情况下都明确。长期方案是去 Preferences 里关掉自动选中功能让 F8 只运行光标所在语句。养成一个习惯按 F8 前低头看一眼状态栏或者先 CtrlA 看一下当前选中的是什么。这个坑不会每次踩但踩一次就可能把不该执行的 DDL 跑掉生产环境尤其危险。5.5 Beautifier 格式化后原来正常的代码报错现象一段之前能正常编译的 PL/SQL执行完美化后再编译报语法错误。原因Beautifier 对大小写、缩进、括号的规则调整影响了语句中字符串或者注释内容的边界。比较典型的是字符串常量里包含空格或引号时格式化改了换行位置逻辑上看起来没变但 Oracle 解析出来的结果已经不同。解决格式化前一定先备份这个习惯比任何设置都管用。如果已经发生了用 CtrlZ 逐步回退回退不了就从备份文件里把源码复制回来。团队多人共用一套 Beautifier 配置时建议把规则配置文件放到一个共享目录保证所有人格式化出来的风格一致减少人为差异带来的隐患。5.6 窗口无响应转圈圈现象执行一条大查询后plsql developer 界面一直处于等待状态窗口标题栏显示“未响应”等很久也不回来。原因最常见是单次抓取的行数设置过大客户端要把几十万行数据全部拉进内存并绘制表格32 位进程内存吃紧界面就卡死了。另外如果查询本身没有走索引数据库端就在全表扫描客户端等的是数据库出数。解决先在 Preferences 里把单次抓取行数调小比如 1000 行这样即使结果集很大界面也会分批加载至少不会整个卡死。再检查 SQL 执行计划确认数据库端不是在做全表扫。如果确实需要全量数据用导出功能而不是结果集窗口导出时 plsql developer 的流式处理比界面渲染更容易扛住大数据量。卡死的时候不要盲目杀进程plsql developer 在等待网络栈时的状态也许还能恢复给它一两分钟如果还不行再结束进程重开。6. 把这本手册变成随身技能我的验证方法和日常习惯手册这种东西读一遍是记不住的它的正确打开方式是当字典查。但字典也有一个缺点你不知道自己不知道什么。所以我给自己定了一个练习方法每次接受一个新环境或者新项目时抽二十分钟按固定的顺序在 plsql developer 里做一整套自检动作。这套动作相当于把手册里最核心的章节浓缩成一个冒烟测试。我的固定顺序是这样的第一步新开一个 SQL Window执行用户环境查询确认 NLS_LANG 没有问题。第二步查一张业务表的字段结构和数据量并在结果集里对一条记录做一次就地修改再提交。这一步同时验证了对象浏览、结果集编辑、提交回写三个能力。第三步从 Object Browser 里打开任意一个已有的存储过程右键 Test进调试器打一个断点单步走两行。这一步验证权限、调试编译状态和测试窗口都正常。第四步把刚才那条查询结果导出一次 CSV用文本编辑器打开确认中文没乱码。整套动作下来不超过二十分钟但能覆盖日常工作里 80% 的操作路径。我还养成了一个小习惯把手册 PDF 里自己最常用、但容易记混的三个点写在便签上贴在显示器旁边。一是 Debug 编译和普通编译是两个入口容易点错二是直连串里 SID 用冒号、service_name 用斜杠写错就报错三是导出日期先 TO_CHAR 再导出省得 Excel 显示成数字序列。这三个点都不是手册里最显眼的章节但都是实际工作中反复出现的摩擦点。工具的熟练度最终靠的是肌肉记忆而肌肉记忆的建立前提是短时间内的重复反馈。与其把手册从头到尾翻一遍不如按上面的四步每天坚持走一遍坚持一周。一周之后你会发现大部分操作都不用经过大脑思考了。希望这份从连接配置到避坑排查的完整路径能帮你在 plsql developer 11 上少走几段弯路。希望帮到你。本文还有配套的精品资源点击获取
返回列表