【问题标题】:Different schema names in stored procedures for development and production用于开发和生产的存储过程中的不同模式名称
【发布时间】:2020-05-14 13:58:37
【问题描述】:

架构名称在开发中为 dev,在生产环境中为 prod。当使用 dev 模式在开发中创建存储过程时,应该采用什么方法将此过程迁移到 prod 环境。下面是一个创建的示例过程,在将 SELECT 语句中的模式名称更改为 prod 之前,将其移动到生产环境的最佳(理想)方法是什么。

CREATE OR REPLACE PROCEDURE GET_EMPLOYEES(
            DEPT_CD IN VARCHAR2(3),
            RESULT_SET OUT SYS_REFCURSOR) AS


 BEGIN
   OPEN RESULT_SET FOR SELECT * FROM DEV.EMPLOYEE WHERE DEPT=DEPT_CD;
 END

END GET_EMPLOYEES;

此过程将从 UI 调用,以在 UI 中显示数据。在 UI 中,使用配置文件正在处理相同的问题。请告诉我移动存储过程的方法应该是什么。 我已经搜索过,但找不到任何解决方案。

【问题讨论】:

    标签: oracle stored-procedures plsql development-environment production-environment


    【解决方案1】:

    移动存储过程的方法应该是什么

    不要在代码中引用架构名称。

    如果 GET_EMPLOYEES 归 DEV 所有,则根本不需要包含架构。

    如果过程由不同的模式拥有,则为 EMPLOYEE 表创建同义词;在开发中,同义词将指向 DEV.EMPLOYEE,而在生产中,同义词将指向 PROD.EMPLOYEE。


    架构名称在开发中为 dev,在生产环境中为 prod

    顺便说一下,让我们指出这是一种不好的做法。我记得二十年前不得不与这样配置的环境搏斗。那时很痛苦,现在也很痛苦。但至少在过去,我们并不知道更好。现在没有理由这样做,除非我们在生产数据库中的单独架构下进行开发(这是非常不可原谅的)。

    【讨论】:

      【解决方案2】:

      最佳做法是在所有环境中保持架构名称相同。如果这是不可能的,您可以随时使用 alter session set current_schema=schema_name

      【讨论】:

      • 设置 current_schema 在这种情况下无济于事。当我们引用数据库对象而不引用模式时,它会更改默认模式。而 Seeker 的问题是他们有明确引用模式的代码。当然,他们不应该在不同的环境中使用不同的模式名称,但不幸的是,这种做法并不少见。
      猜你喜欢
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 2016-03-29
      • 2015-03-28
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      相关资源
      最近更新 更多