Oracle SQL Developer 如何通过右键菜单实现拖拽表格生成DML功能
Oracle SQL Developer 18.3 右键生成拖拽等效DML的实现方案
方案1:内置自定义右键菜单扩展(推荐,无额外依赖)
该方案利用SQL Developer原生支持的用户扩展功能,实现完全等效于拖拽的DML生成效果,生成的语句格式和拖拽输出完全一致,不会出现Quick DDL、Export功能的格式不符问题:
- 打开顶部菜单栏
工具→首选项 - 在左侧目录树依次展开
数据库→用户自定义扩展 - 点击右侧面板的「添加行」按钮,类型下拉选择
ACTION - 在代码列填写对应DML的生成逻辑,以下是常用场景的参考代码:
- 生成全量SELECT语句:
SELECT 'SELECT * FROM ' || :OBJECT_NAME || ';' FROM DUAL- 生成带列名的INSERT模板:
SELECT 'INSERT INTO ' || :OBJECT_NAME || ' (' || LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) || ') VALUES (' || LISTAGG(':' || COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) || ');' FROM USER_TAB_COLUMNS WHERE TABLE_NAME = :OBJECT_NAME GROUP BY TABLE_NAME- 生成WHERE主键匹配的UPDATE模板:
SELECT 'UPDATE ' || :OBJECT_NAME || ' SET ' || LISTAGG(COLUMN_NAME || ' = :' || COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) || ' WHERE ' || (SELECT COLUMN_NAME FROM USER_CONSTRAINTS UC JOIN USER_CONS_COLUMNS UCC ON UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME WHERE UC.TABLE_NAME = :OBJECT_NAME AND UC.CONSTRAINT_TYPE = 'P' AND ROWNUM = 1) || ' = :PK_VALUE;' FROM USER_TAB_COLUMNS WHERE TABLE_NAME = :OBJECT_NAME GROUP BY TABLE_NAME - 在「名称」列填写右键菜单要显示的文字,比如「生成SELECT语句」「生成INSERT模板」,保存配置后重启SQL Developer
- 重启后右键点击任意表,菜单底部会出现你自定义的选项,点击后直接在当前工作表生成对应DML语句
方案2:调整拖拽偏好(临时替代方案)
如果暂时不想配置自定义扩展,可以先修改拖拽配置降低误触概率:
- 打开
工具→首选项→数据库→拖放操作 - 勾选「拖拽时显示操作选择弹窗」,之后拖拽表到工作表时会先弹出选项菜单,不需要控制拖拽速度即可选择要生成的语句类型,大幅降低误触概率
- 也可以直接将默认拖放行为设置为你最常用的DML类型,无需额外选择即可生成对应语句
注意事项
- 脚本中的
:OBJECT_NAME是SQL Developer内置绑定变量,会自动替换为右键选中的表名,自动适配带Schema前缀的场景 - 可以根据自身使用需求修改生成逻辑,完全自定义语句格式
- 18.3版本对自定义扩展的支持稳定,不会影响原有功能正常使用
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

