【问题标题】:Oracle SQL Developer removes schema name from packageOracle SQL Developer 从包中删除模式名称
【发布时间】:2016-11-07 10:14:29
【问题描述】:

所以我写了:

create or replace package body schema_name.package_name

一旦我按下编译,应用程序就会删除架构名称,用这样的空格替换它:

create or replace package body             package_name

有谁知道如何摆脱这种烦人的行为?

【问题讨论】:

    标签: oracle-sqldeveloper


    【解决方案1】:

    这不是 SQL Developer 做的。如果您通过 SQL*Plus 创建包,然后查询 dba_source(或 all/user 变体),您将看到名称已被删除,以及 create or replace 文本:

    SQL> create or replace package my_schema.package_name as
      2  end;
      3  /
    
    Package created.
    
    SQL> select text from sys.dba_source
      2  where type = 'PACKAGE' and owner = 'MY_SCHEMA' and name = 'PACKAGE_NAME'
      3  order by line;
    
    TEXT
    --------------------------------------------------------------------------------
    package           package_name as
    end;
    
    2 rows selected.
    

    所有者不是包源的一部分,它单独存储在数据字典中(dba_objects.owner 等)。解析器正在删除所有者,因为它不属于那里,作为数据库中实际存在的对象的一部分。作为纯粹的外部源代码(或可能无论如何),如果合适的话,您在源代码管理中拥有的版本可以保留它;但作为该架构中定义的对象的一部分,它没有任何意义。

    您可能还注意到,如果您尝试从对象查看器在另一个架构中创建对象,它会告诉您模块已重命名并尝试重新打开对象查看器。

    有趣的是,所有者名称被替换为空格(包括两个用于双引号,如果模式名称被引用),而不是被完全删除。同样有趣的是,SQL Developer 的对象查看器总是将create or replace 放入其中——但也要注意它总是包含or replace,即使您最初的代码中没有它。如果没有,那么您当然无法重新编译它。

    dbms_metadata.get_ddl 包默认重新添加架构名称,并引用标识符;但也会在此过程中丢失额外的空格:

    SQL> select dbms_metadata.get_ddl('PACKAGE', 'PACKAGE_NAME', 'MY_SCHEMA') from dual;
    
    DBMS_METADATA.GET_DDL('PACKAGE','PACKAGE_NAME','MY_SCHEMA')
    --------------------------------------------------------------------------------
    
      CREATE OR REPLACE PACKAGE "MY_SCHEMA"."PACKAGE_NAME" as
    end;
    
    
    1 row selected.
    

    SQL Developer 的对象视图似乎没有任何方法可以显示或重新添加架构名称。

    【讨论】:

    • 尽管我对结果感到失望,但我非常感谢您的回答。
    • @MladenOršolić - 你可以随时在SQL Developer forum 上提出它,看看它是否会成为未来的改进。
    • 我实际上可能会,因为我们刚刚将它与 TOAD 的行为进行了比较,并且在 TOAD 中它按预期工作。如果您编写模式名称,它会在重新编译/重新打开后保留在那里。
    【解决方案2】:

    如果您编译/重新编译,它不会保留模式名称。但是,如果您选择通过 SQL Developer 导出包文件,则可以选择包含架构并将其添加回导出中。

    为什么它在编辑器空间中被删除,我不确定其背后的逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      相关资源
      最近更新 更多