通过ODP .NET编译时,Oracle软件包和类型的问题变得无效

时间:2017-06-16 18:15:27

标签: c# oracle plsql automation odp.net

背景

我正在尝试使用ODP.NET在Oracle数据库上编译类型和包。

问题

当我在C#中读取我的.pks文件的内容并使用ExecuteNonQuery / ExecuteNonQueryAsync运行该命令时,编译序列似乎工作正常。该命令执行,但编译对象处于无效状态(参见下面SQL Developer的截图)。

This is a screenshot of the package state after the C# program attempted to create types and packages automatically

如果我手动进入SQL Developer,右键单击无效类型并单击“编译”,它没有任何问题。我没有编辑任何代码,没有警告或错误抛出。 (见下图。)

  1. 查找无效的包或类型 enter image description here

  2. 右键单击并编译类型/包 enter image description here

  3. 不会抛出任何错误,类型/包编译时没有任何问题 enter image description here

  4. 由于这些步骤始终如一,我将ALTER TYPE/PACKAGE name_of_type_or_package COMPILE;添加到我的所有脚本中,以确定它是否可以解决问题。

    我尝试过什么

    我已尝试以下方法来解决问题:

    1. \r\n行结尾更改为\r
    2. 试图将我的代码包装在BEGIN END;
    3. 试图将我的代码包装在BEGIN EXECUTE IMMEDIATE END;
    4. 仅使用EXECUTE IMMEDIATE
    5. 从我的定义文件中剥离最终;
    6. \r\n更改为spaces
    7. 我还尝试过其他一些修复方法,但我无法解决任何问题。

      什么有用

      运行程序后,如果我进入数据库并右键单击无效对象,然后选择编译,代码编译就好了。

      如果我使用@C:\FilePath直接从Oracle SQL Developer运行脚本,那么类型和过程就可以正常编译。

      问题

      我可以采取哪些措施来解决我的代码在ODP .NET中以无效状态编译的情况?

      参考

      作为参考,我已经包含了我试图运行的.pks文件中的代码。

      meta_data_row Permutation 1

      DROP TYPE grid_report_metadata_row FORCE
      CREATE OR REPLACE TYPE grid_report_metadata_row AS OBJECT
      (
          line_number NUMBER,
          report_signature VARCHAR2(32),
          group_name VARCHAR2(32),
          display_group_name VARCHAR2(32),
          metadata_name VARCHAR2(64),
          metadata VARCHAR2(256)
      );
      ALTER TYPE grid_report_metadata_row COMPILE
      

      meta_data_row Permutation 2

      DROP TYPE grid_report_metadata_row FORCE;
      CREATE OR REPLACE TYPE grid_report_metadata_row AS OBJECT
      (
          line_number NUMBER,
          report_signature VARCHAR2(32),
          group_name VARCHAR2(32),
          display_group_name VARCHAR2(32),
          metadata_name VARCHAR2(64),
          metadata VARCHAR2(256)
      );
      ALTER TYPE grid_report_metadata_row COMPILE;
      

      meta_data_row排列3

      DROP TYPE grid_report_metadata_row FORCE
      /
      CREATE OR REPLACE TYPE grid_report_metadata_row AS OBJECT
      (
          line_number NUMBER,
          report_signature VARCHAR2(32),
          group_name VARCHAR2(32),
          display_group_name VARCHAR2(32),
          metadata_name VARCHAR2(64),
          metadata VARCHAR2(256)
      );
      /
      ALTER TYPE grid_report_metadata_row COMPILE
      

0 个答案:

没有答案