SQL Developer运行教程代码报错PLS-00103及运行菜单灰化问题咨询
问题排查解决方案
问题1:PLS-00103 报错解决
报错的核心原因是你将SQLPlus客户端命令和PL/SQL存储过程定义放在同一个PL/SQL执行块中运行,SET SERVEROUTPUT ON是SQL Developer/SQLPlus的客户端控制命令,不属于PL/SQL语法,PL/SQL编译器将其识别为存储过程的一部分就会报语法错误。
你只需要在存储过程定义的末尾添加/作为PL/SQL块的结束分隔符,拆分不同执行单元即可,修正后的可运行代码如下:
create or replace PROCEDURE proc1 ( emp_id IN NUMBER ) IS emp_fname VARCHAR2(50); BEGIN SELECT first_name INTO emp_fname FROM employees WHERE employee_id = emp_id; dbms_output.put_line('Employee name is: ' || emp_fname); END; / -- 存储过程定义结束分隔符 SET SERVEROUTPUT ON EXEC proc1(100)
补充说明:讲师运行无问题是因为其客户端配置为按语句自动分割执行,不需要显式写分隔符,全选批量执行的场景下必须添加分隔符区分不同执行单元。
问题2:SQL Developer运行菜单灰化解决
按优先级从高到低排查如下:
- 确认当前工作表已绑定有效连接:查看工作表右上角的连接下拉框,确认已选中指向Oracle 19c虚拟机的已激活连接,若连接断开需要先重连。
- 确认已选中要执行的代码段:部分版本的SQL Developer在未选中任何代码时会默认灰化运行相关菜单,手动拖动选中需要执行的语句即可恢复菜单可用状态。
- 检查版本兼容性:确认你使用的SQL Developer版本适配Oracle 19c,且客户端设备上的JDK版本符合当前SQL Developer的运行要求,版本不兼容会导致UI功能异常。
- 重置工作表:关闭当前异常的工作表,通过已连接的数据库实例新建工作表,重新输入代码测试即可。
调试功能前置要求:上述问题解决后如果要使用单步调试,需要先给当前数据库用户授予DEBUG CONNECT SESSION、DEBUG ANY PROCEDURE权限,同时确认虚拟机的数据库监听端口未被防火墙拦截。
内容的提问来源于stack exchange,提问作者everwisher
相关产品推荐
相关产品推荐

