C# と System.Data.OracleClient を使用して、データベースに関数を追加しています。これは、1 つを除いて、ほとんどの関数で機能します。関数は作成されましたが、その状態は INVALID です。この無効な状態の原因を調べたところ、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#アプリケーションでは機能しません。