我正在使用 C# 和 System.Data.OracleClient 向数据库添加函数。这适用于大多数功能,除了一个。该函数已创建,但其状态为无效。在检查了这种无效状态的原因后,我注意到我可以在 SQL Developer 中简单地编译该函数,但不能从我的 c# 应用程序中编译。
任何想法为什么使用 .NET 和 SQL Developer 会有所不同?
这是我使用的功能
string sql =
@"CREATE OR REPLACE FUNCTION MYUSER.TEMPJOINSTRINGS
( P_CURSOR SYS_REFCURSOR,
P_DEL VARCHAR2 := ', '
) RETURN VARCHAR2
IS
L_VALUE VARCHAR2(32767);
L_RESULT VARCHAR2(32767);
BEGIN
LOOP
FETCH P_CURSOR INTO L_VALUE;
EXIT WHEN P_CURSOR%notfound;
IF L_RESULT IS NOT NULL THEN
L_RESULT := L_RESULT || P_DEL;
END IF;
L_RESULT := L_RESULT || L_VALUE;
END LOOP;
RETURN L_RESULT;
END;";
try
{
using (OracleConnection connection = new OracleConnection(@"Data source=TEST10;User Id=MYUSER;Password=MYPASS;"))
{
connection.Open();
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
connection.Close();
return true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
然后我执行
ALTER FUNCTION MYUSER.TEMPJOINSTRINGS COMPILE
但是编译只能在 SQL Developer 中工作,而不是我的 c# 应用程序。