使用 Oracle 数据库链接,无需不可读的动态 SQL

2024-02-28

如何编写可以针对给定数据库链接执行的简洁 PL/SQL 存储过程?

写起来真的很混乱:

   PROCEDURE my_proc(aDbLink IN VARCHAR2)
   IS
   BEGIN       
       EXECUTE IMMEDIATE '
       SELECT mycolumn, anothercolumn
       FROM MYTABLE@' || aDbLink || '
       WHERE such-and-such...'
   END

随着查询变得更大。

我还能做什么?我被困在使用存储过程中,并期望我的过程将针对多个数据库链接之一执行。


避免使用动态 SQL 的最简单方法是创建同义词。

CREATE OR REPLACE SYNONYM MyTableRemote
   FOR MyTable@database_link

然后,您的存储过程将简单地引用同义词MyTableRemote。然后,您可以使用一个单独的方法,将数据库链接名称作为参数,并将所有同义词更改为指向数据库链接。

PROCEDURE replace_synonyms( p_db_link IN VARCHAR2 )
AS
BEGIN
  -- Adjust the query to identify all the synonyms that you want to recreate
  FOR syn IN (SELECT *
                FROM user_synonyms
               WHERE db_link IS NOT NULL)
  LOOP
    EXECUTE IMMEDIATE 
      'CREATE OR REPLACE SYNONYM ' || syn.synonym_name ||
      '   FOR ' || syn.table_owner || '.' || syn.table_name || '@' || p_db_link;
  END LOOP;
END;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Oracle 数据库链接,无需不可读的动态 SQL 的相关文章

随机推荐

  • 在 woocommerce 管理产品列表中添加特定产品属性的过滤器下拉列表

    在 Woocommerce 的管理产品列表中 我应该需要过滤特定属性的产品 基于 在 woocommerce 管理产品列表中添加产品标签的过滤器下拉列表 https stackoverflow com questions 51964016
  • 创建 Jackson ObjectMapper 实例的克隆

    我正在写一个需要一个库com fasterxml jackson databind ObjectMapper实例 库的用户应该能够提供 ObjectMapper 或 ObjectMapper 实例本身的配置 但我还添加 修改了序列化器的一些
  • Google Apps 脚本中的编辑器可以部署网络应用程序吗?

    在 Google Apps 脚本中拥有编辑权限 非所有者 的人可以部署网络应用吗 我是 Google Web App 的所有者 我希望合作者也能够部署该脚本 由于我的 Web 应用程序不能有两个所有者 另一个人是编辑者 因此无法部署 Web
  • 如何使“git分支”尊重Linux上的“core.ignorecase”标志?

    我们正在使用位于办公室 Linux 服务器上的远程 Git 存储库 所有客户端都是 Windows PC 并安装了 Git 扩展作为客户端 使用 msysgit 运行 在客户端系统上 如果我尝试执行以下操作 git branch Branc
  • 如果用户的分辨率< x,可以自动缩小吗?

    我的网站纯粹针对笔记本电脑市场 不要问为什么或争论 我所有的用户 或 95 我们的屏幕宽度为 1200 上网本现在正在兴起 分辨率已达到 1024 宽 如果您缩小一次 ctrl 减号 我的网站在上网本上看起来仍然很棒 但我不想依赖用户了解c
  • 通过修改LLVM Backend来Clobber X86寄存器

    我正在尝试稍微改变 X86 目标的 LLVM 后端 以产生一些所需的行为 更具体地说 我想模拟一个像 gcc 的 fcall used 这样的标志reg option https gcc gnu org onlinedocs gcc Cod
  • Session 存储在哪里?

    我问我的朋友 session保存在哪里 在服务器还是浏览器 他说 在服务员那里 然后我说 我认为保存在服务器上的东西称为缓存 然后 我去google搜索阅读文章 但没有找到具体的正确答案 在MSDN上也没有找到具体的答案 通常它保存在服务器
  • 如何在 Spring @RestController 中以 JSON 形式返回Optional

    RestController中有代码 GetMapping update odds public Optional
  • VSCode扩展TreeView设置选中

    我创建了一个TreeDataProvider并填充它TreeItem s 我希望能够设置TreeItem根据当前编辑器窗口选择 就像在资源管理器 打开编辑器视图中发生的情况一样 我已经查看了 API 但找不到任何方法来做到这一点 您可以使用
  • 具有两个嵌套循环的非递归合并排序 - 如何?

    这是第一个问题 是的 这是一个家庭作业问题 我们的任务是对数组 我熟悉的 执行合并排序 但在某种程度上我不确定该怎么做 通常我会有一个单独的合并和合并排序函数 并使用这两个函数 不过 听起来他想要一切都用一种方法 我只是希望有人可以帮助我解
  • 有没有办法在 Xamarin Forms 中禁用屏幕截图?

    我希望我的 Xamarin Forms 应用程序禁用屏幕截图 有办法这样做吗 注意 我找到了纯 Android 和 iOS 版本的解决方案 但我需要 Xamarin 解决方案 如果有办法以某种方式嵌入纯 Android 和 iOS 解决方案
  • RibbonActions.js 在 Dynamics 365 统一接口中已弃用。是否有新的 JS 库替代 RibbonActions.js?

    我正在使用 OOTB直接发送电子邮件按钮发送批量电子邮件 这在经典模式下工作正常 但在统一接口 经过一番研究后我发现 static common scripts RibbonActions js已弃用并且 网络资源必须改为使用 有什么办法可
  • 将 Python 字典列表附加到文件而不加载它

    假设我需要一个由字典列表组成的数据库文件 file name Joe data 1 2 3 4 5 我需要一个函数来接收如上所示的字典列表并将其附加到文件中 有什么方法可以实现这一点 比如使用 json 或任何其他方法 而不加载文件 编辑1
  • 在代码中处理/格式化 Javadoc 和注释的最佳方法是什么? [复制]

    这个问题在这里已经有答案了 我浏览过这个论坛 并且用 google 搜索过这个论坛 但我不确定处理同时出现在同一类中的 Javadoc 和注释的最佳方法是什么 从我从 Sun Oracle 的文档中可以看到 他们似乎建议 尽管我无法真正找到
  • 为什么是 this.callParent(arguments);在 ExtJS 构造函数的开头调用?

    我注意到 在我最近修改的许多程序中 它们总是调用当前对象的父参数 我知道这是必要的 但对为什么这是一种常见做法没有充分的了解 对于初级开发人员来说 有什么智慧吗 我应该知道这一点 这是 ExtJS 用于支持构造函数中的类继承的机制 呼唤th
  • Python 脚本错误地删除了 .xlsx 文件中创建的图表

    我尝试使用 Python 编写一个脚本 该脚本从存储在文件夹层次结构中的所有 csv 文件中获取一些特定值 这些值将复制到已创建的目标文件 xlsx 中的某些特定单元格 目标文件还有一些现有的空图表 在单独的工作表中 这些图表将使用脚本提供
  • CGPath Scale 出现问题

    我正在使用绘制多边形CGPath并添加到CAShapeLayer 我想扩大我的规模CGPath当用户点击它时 我知道如何扩展CGPath 但是当我点击我的CGPath my CGPath当我在中心绘制多边形时 绘制远离中心 CGAffine
  • 在Python中获取特定JSON元素的值

    我对 Python 和 JSON 很陌生 所以如果我听起来一无所知 我很抱歉 我从 Google Translate API 获得以下结果 并希望解析出 translatedText 的值 data translations transla
  • AngularJS 将焦点移动到回车时的下一个控件

    最好的方法是什么 当在表单中按 Enter 键时 焦点转到下一个输入 而不是使用 AngularJS 提交表单 我有一个包含很多字段的表单 客户习惯于按 Enter 移动到下一个输入 来自桌面应用程序 当用户按 Enter 键时 Angul
  • 使用 Oracle 数据库链接,无需不可读的动态 SQL

    如何编写可以针对给定数据库链接执行的简洁 PL SQL 存储过程 写起来真的很混乱 PROCEDURE my proc aDbLink IN VARCHAR2 IS BEGIN EXECUTE IMMEDIATE SELECT mycolu