Mla*_*lić 1 oracle-sqldeveloper
所以我写了:
create or replace package body schema_name.package_name
Run Code Online (Sandbox Code Playgroud)
一旦我按下编译,应用程序就会删除架构名称,并将其替换为空格,如下所示:
create or replace package body package_name
Run Code Online (Sandbox Code Playgroud)
有谁知道如何摆脱这种恼人的行为?
这不是 SQL Developer 做的。如果您通过 SQL*Plus 创建包,然后查询dba_source(或所有/用户变体),您将看到名称和文本已被删除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.
Run Code Online (Sandbox Code Playgroud)
所有者不是包源的一部分,它单独存储在数据字典(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.
Run Code Online (Sandbox Code Playgroud)
不过,SQL Developer 的对象视图似乎没有任何方法可以显示或重新添加架构名称。
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |