私はそうのような特定のトリガーの状態を切り替えるための私のOracleデータベースにプロシージャを作成しました:OracleプロシージャはEF6から呼び出されませんか?
CREATE OR REPLACE PROCEDURE MYSCHEMA.PROC_SWITCH_TRIGGER_STATUS AS
vStatus VARCHAR(10);
vAction VARCHAR(10):= 'ENABLE';
BEGIN
SELECT STATUS INTO vStatus FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'MY_TRIGGER_NAME';
IF vStatus = 'ENABLED' THEN
vAction := 'DISABLE';
END IF;
EXECUTE IMMEDIATE 'ALTER TRIGGER MY_TRIGGER_NAME ' || vAction;
END PROC_SWITCH_TRIGGER_STATUS;
/
を私はこれを確認したデータベース内で直接実行時に完璧に動作し、事は私がしたいですEFを使用してC#コードから実行します。私はそれが可能になり、次のステートメントのいずれかで考えた:
db.Database.SqlQuery<object>("BEGIN MYSCHEMA.PROC_SWITCH_TRIGGER_STATUS END;");
db.Database.SqlQuery<object>("CALL MYSCHEMA.PROC_SWITCH_TRIGGER_STATUS();");
db.Database.SqlQuery<object>("EXEC MYSCHEMA.PROC_SWITCH_TRIGGER_STATUS;");
それらを実行した後、トリガーのステータスには影響ありません、それは同じまま。注意SqlQuery
ジェネリック型のパラメータにobject
を使用しました。なぜなら、私の手続きは何も返しません。私は実際にそれが正しいかどうかわかりませんが、エラーは返されません。私はそれが次のように動作していないテスト:
class _Status { public string STATUS {get; set;} }
...
string q = "SELECT STATUS FROM USER_TIGGERS WHERE TRIGGER_NAME='MY_TRIGGER_NAME'";
_Status sBefore = db.Database.SqlQuery<_Status>(q);
<execution of any of the above procedure calls>
_Status sAfter = db.Database.SqlQuery<_Status>(q);
Console.WriteLine(sBefore.FirstOrDefault()?.STATUS);
Console.WriteLine(sAfter.FirstOrDefault()?.STATUS);
上記の出力は次のとおりです。
ENABLED
ENABLED
私はODP.NET、管理ドライバおよびEF 6.2と私の質問/疑問を使用していますプロシージャの呼び出し/呼び出しがトリガのステータスに影響するためには、私に何をするべきかアドバイスできますか?私はデータベースと接続文字列に接続するときに同じUSER/SCHEMAを使用しています。前もって感謝します!