# 修改数据库对象的源代码

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com.cn/help/idea/llms.txt).

> **TL;DR**
> 查看所有修改过的对象：  `查看 | 工具窗口 | 数据库更改`
>
>
>
> 只有在修改数据库对象的源代码后，   数据库更改   工具窗口才可用。
>
>
>
> 以下 YouTube 视频展示了更新例程源代码的基本工作流程： [更新例程源代码](https://www.youtube.com/watch?v=U5SOD-eeK50&t=1623s)。

Procedure: 启用 数据库工具和 SQL 插件

此功能依赖于 数据库工具和 SQL 插件，该插件默认情况下在 IntelliJ IDEA 中绑定并启用。 如果相关功能不可用，请确保您没有禁用插件。

> **Note:**
> 没有 Ultimate 订阅时，数据库工具和 SQL 的功能支持在 IntelliJ IDEA 中受限。

1. 按 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS)) 打开设置，然后选择  `插件` 。

2. 找到  数据库工具和 SQL  插件并点击   启用  。

IntelliJ IDEA 会跟踪您对在数据库中存储其源代码的对象所做的更改。 这些对象可能是触发器、过程、函数、视图或其他对象。 您在编辑器中对这些对象所做的每一个修改都会保存为对象源代码的本地版本。

## 更新源代码

IntelliJ IDEA 在内省过程中检索有关数据库的信息。 此信息用于在   数据库  工具窗口中显示对象、显示其 DDL、在代码补全时提供建议，以及在其他编码辅助功能中使用。

您可以通过编辑数据库对象的 DDL 并提交更改来直接更新源代码。 IDE 将生成迁移脚本并在数据库中执行。

数据库更改   工具窗口显示您所有更改的摘要。

Procedure: 为数据源加载源代码

IntelliJ IDEA 在内省过程中检索数据源的源代码。 您可以在数据源属性中管理此过程。

1. 通过以下任一方式打开数据源属性：

* 在 数据库 工具窗口工具栏中，点击 ![数据源图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/database-plugin.icons.expui.manageDataSources.svg) 数据源 。

* 请按 `Shift+Enter` (Windows), `⌘ I` (macOS), `⇧ ⏎` (IntelliJ IDEA Classic (macOS)), `⌘ I` (macOS System Shortcuts), `Shift+Enter` (XWin), `Shift+Enter` (GNOME), `Shift+Enter` (KDE), `Shift+Enter` (Emacs), `Shift+Enter` (Sublime Text), `⌘ I` (Sublime Text (macOS)), `Shift+Enter` (Visual Studio), `⌘ I` (Visual Studio (macOS)), `Shift+Enter` (NetBeans), `Shift+Enter` (Eclipse), `⌘ I` (Eclipse (macOS)) .

![打开数据源和驱动程序对话框](https://resources.jetbrains.com.cn/help/img/idea/2026.3/open_data_sources_and_drivers_dialog.png)

2. 请选择您想要下载源代码的一个或多个数据源。

3. 右键点击选择内容并导航到  `加载源` 。 您可以在以下选项之间进行选择：

* 无 ：请勿下载源代码。

* 除系统架构外 ：下载所有对象的源代码，除了系统模式。

* 所有架构 ：下载所有可用的源代码。

![为数据源加载源代码](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_load_source_code_for_data_source.png)

Procedure: 编辑对象的源代码

您可以通过直接编辑数据库对象的 DDL  `CREATE`  脚本并在编辑器中提交更改来更新源代码。 IDE 将生成一个包含您更改的迁移脚本，提示您进行验证，然后在数据库中执行该脚本。

1. 右键点击对象并选择  `导航 | 转到 DDL` 。 或者按 `Ctrl+B` (Windows), `⌘ B` (macOS), `⌘ B` (IntelliJ IDEA Classic (macOS)), `⌘ B` (macOS System Shortcuts), `Ctrl+B` (XWin), `Ctrl+B` (GNOME), `Ctrl+B` (KDE), `Ctrl+Alt+G` (Emacs), `F12` (Sublime Text), `F12` (Sublime Text (macOS)), `F12` (Visual Studio), `F12` (Visual Studio (macOS)), `Ctrl+B` (NetBeans), `F3` (Eclipse), `F3` (Eclipse (macOS))。

> **Note:**
> 生成的脚本中的对象引用未限定（例如，用  `<view_name>`  而不是  `<schema_name>.<view_name>` ）。 您可以查看该脚本、编辑它，并将更改提交到数据库。
>
>
>
> 若要获取包含  `CREATE OR REPLACE` 、限定引用等内容的可运行 DDL 脚本，请使用 [SQL 生成器](export-data.html#generate-ddl-definitions-for-dat)。

2. 对源代码进行更改。

3. （可选）在   数据库更改  工具窗口  `查看 | 工具窗口 | 数据库更改` 中，双击修改过的对象以打开"差异查看器"并验证您的更改。

4. 点击   提交   按钮（ ![提交按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/database-plugin.icons.expui.submitDB.svg)）。

当您在   数据库更改   工具窗口中点击   提交   按钮 ( ![提交按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/database-plugin.icons.expui.submitDB.svg)) 时，您会看到   迁移   对话框。   迁移  对话框显示对象的迁移脚本。

5. 在   对象迁移   对话框中，确认迁移脚本正确，然后点击   OK  。

迁移脚本是更改整个数据库或其部分的代码。 您可以使用迁移脚本来添加或删除列、升级数据库版本或更改列属性。

IntelliJ IDEA 可以自动生成迁移脚本，但您需要在运行之前检查它。

Procedure: 查看源代码中的所有更改

* 从主菜单中选择  `查看 | 工具窗口 | 数据库更改` 。

> **Note:**
> 只有在修改数据库对象的源代码后，   数据库更改   工具窗口才可用。

![数据库变更工具窗口](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_database_changes_tool_window.png)

Procedure: 查看修改版本和存储版本之间的差异

* 编辑任何对象的源代码时，IntelliJ IDEA 会跟踪更改并在装订区域中高亮显示这些更改。 例如，添加一行注释到例程或触发函数。 添加的行会高亮显示。 如果您点击装订区域高亮的行，将显示带有   显示行差异  按钮的小工具栏。 您可以点击   显示行差异  按钮( ![显示差异图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.vcs.diff.svg))查看您添加的代码与源代码之间的区别。

![IDE 高亮显示源代码中的更改](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_diff_via_code_editor.png)

* 在   数据库更改  工具窗口(  `查看 | 工具窗口 | 数据库更改` )中，双击修改后的对象以打开 差异查看器 并验证您的更改。

![数据库变更工具窗口](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_diff_via_database_changes.png)

## 过时的缓存对象

IntelliJ IDEA 会缓存数据库中所有对象的源代码，以提供快速的编码支持和导航功能。 如果您打开的对象已从第三方位置更新，您将看到一条通知，指出缓存的对象与数据库中同一对象的源代码不同。

![过时的缓存对象](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_outdated_cached_objects.png)

如果您在 IDE 中看到此警告，您可以选择以下操作：

* 同步 ：从数据库提取更改并更新缓存的本地对象。

* 禁用检查​ ：禁用此通知。

此外，您的对象源代码版本和数据库中的版本之间可能存在冲突。 例如，当您修改了与其他人相同的源代码并按下   提交  （ `Ctrl+K` (Windows), `⌘ K` (macOS), `⌘ K` (IntelliJ IDEA Classic (macOS)), `⌘ K` (macOS System Shortcuts), `Ctrl+K` (XWin), `Ctrl+K` (GNOME), `Ctrl+K` (KDE), `Ctrl+K` (Emacs), `Ctrl+K` (Sublime Text), `Ctrl+K` (Sublime Text (macOS)), `Ctrl+Alt+K` (Visual Studio), `⌘ ⌥ ⇧ K` (Visual Studio (macOS)), `Ctrl+K` (NetBeans), `Ctrl+K` (Eclipse), `Ctrl+K` (Eclipse (macOS))）。

![过时的缓存对象](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_outdated_cached_objects_conflict.png)

可以强制替换数据库中对象的源代码（   强制重构  ），或同步对象状态，然后继续更改（   中止重构并同步  ）。

如果选择了   中止重构并同步  ，IntelliJ IDEA 会停止提交操作并从数据库获取更改（类似于按下   同步   `Ctrl+F5` (Windows), `⌘ R` (macOS), `⌃ F5` (IntelliJ IDEA Classic (macOS)), `⌘ R` (macOS System Shortcuts), `Ctrl+F5` (XWin), `Ctrl+F5` (GNOME), `Ctrl+5` (KDE), `Ctrl+F5` (Emacs), `Ctrl+F5` (Sublime Text), `⌘ R` (Sublime Text (macOS)), `Ctrl+Alt+R` (Visual Studio), `⌘ ⌥ R` (Visual Studio (macOS)), `Ctrl+F5` (NetBeans), `Ctrl+F5` (Eclipse), `Ctrl+F5` (Eclipse (macOS))）。 如果冲突仍然存在，您将看到以下通知。

![过时的缓存对象](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_outdated_cached_objects_synchronize.png)

在此通知中，可以在以下选项之间进行选择：

* 还原本地更改 ：回滚所有更改并用数据库中的版本替换它们。

* 保留本地更改 ：使用您的更改并覆盖数据库中的更改。

* 合并 ：显示差异对话框以合并对象源代码的两个版本。 ![过时的缓存对象](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_outdated_cached_objects_merge.png)

## 对象状态的颜色

默认情况下，所有对象都以黑色显示。 这意味着对象源代码的当前状态与服务器上同一对象的源代码没有差异。

如果对象的源代码已更改，但与服务器上对象源代码没有冲突，则对象以蓝色显示。

如果本地对象的源代码与服务器上同一对象的源代码存在冲突，则对象以红色显示。 如果在编辑器中打开此类对象，将看到有关冲突的通知。

例如，在下列截图中，  `get_customer_balance`  函数被修改但没有冲突，  `film_in_stock`  函数被修改并且与服务器上相同函数的源代码冲突，其他对象没有被修改。

## See also

### 参考

[数据库更改工具窗口](database-changes-tool-window.html) [数据源和驱动程序对话框](data-sources-and-drivers-dialog.html)

### 概念

[内省](glossary-database-tools-and-sql.html#introspection)

