我正在尝试使用ODP.NET在Oracle数据库上编译类型和包。
当我在C#中读取我的.pks文件的内容并使用ExecuteNonQuery
/ ExecuteNonQueryAsync
运行该命令时,编译序列似乎工作正常。该命令执行,但编译对象处于无效状态(参见下面SQL Developer的截图)。
如果我手动进入SQL Developer,右键单击无效类型并单击“编译”,它没有任何问题。我没有编辑任何代码,没有警告或错误抛出。 (见下图。)
由于这些步骤始终如一,我将ALTER TYPE/PACKAGE name_of_type_or_package COMPILE;
添加到我的所有脚本中,以确定它是否可以解决问题。
我已尝试以下方法来解决问题:
\r\n
行结尾更改为\r
BEGIN END;
BEGIN EXECUTE IMMEDIATE END;
EXECUTE IMMEDIATE
;
。\r\n
更改为spaces
我还尝试过其他一些修复方法,但我无法解决任何问题。
运行程序后,如果我进入数据库并右键单击无效对象,然后选择编译,代码编译就好了。
如果我使用@C:\FilePath
直接从Oracle SQL Developer运行脚本,那么类型和过程就可以正常编译。
我可以采取哪些措施来解决我的代码在ODP .NET中以无效状态编译的情况?
作为参考,我已经包含了我试图运行的.pks
文件中的代码。
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
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;
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