2017-09-28 2 views
1

그래서 C#에서 저장 프로 시저 (Oracle)를 호출하려고하지만 정확한 구문을 알지 못하고 매개 변수가 필요한지 여부를 알지 못하기 때문에 이 절차는 매개 변수를 가져 와서 자동으로 할당하므로 어떤 매개 변수를 전달해야합니까? C#에서 저장된 Oracle 프로 시저 호출하기

다음은 저장 프로 시저를 사전에

create or replace procedure p_delete_tt_duration_10min is 
new_status varchar2(50); 
status  varchar2(20); 
p_tkt  varchar2(50); 

cursor prt_cursor is 

SELECT a.id, 
     a.ticketno, 
     to_number(a.outagedurationmin), 
     a.fault_occur_time, 
     a.auto_clear_time 
    FROM pmp_bpm_troubleticket a 
    WHERE a.fault_id IS NOT NULL 
    AND a.fault_occur_time IS NOT NULL 
     --and a.generatedby = 'Automatic' 
    AND ((a.tt_type IN ('Cell/Sector Down', 
         '3G Cell Down Alarm', 
         '4G Cell Down Alarm') AND 
     to_number(a.outagedurationmin) < 18) OR 
     (a.tt_type IN ('Site Down', 
         'NodeB Down Alarm', 
         'ENodeB Down Alarm', 
         'TRX/Equipment Faulty', 
         'Processing Problem', 
         'GPRS Down', 
         'Media disconnect', 
         'Hardware Fault', 
         'Link Down') and 
     to_number(a.outagedurationmin) < 10)) 
    AND a.fault_occur_time >= '2017-04-01 00:00:00' order by to_number(a.outagedurationmin) desc; 


begin 
for prt_temp in prt_cursor loop 
    p_tkt := prt_temp.id; 
    delete from wf_assignment t 
    where t.assignment_id in 
     (select id from wf_dai_ban_task a where a.primary_key = p_tkt); 
commit; 
delete from wf_dai_ban_task a where a.primary_key = p_tkt; 
commit; 
delete from wf_yi_ban_task a where a.primary_key = p_tkt; 
commit; 
delete from pmp_bpm_task_expand_info a where a.primary_key = p_tkt; 
commit; 
delete from PMP_BPM_CC_LIST a where a.primarykey = p_tkt; 
commit; 
delete FROM PMP_BPM_TROUBLETICKET_PROCESS D 
WHERE D.ACTIVITYID IN (SELECT W.ID 
          FROM PMP_BPM_TROUBLETICKET_ACTIVITY W 
         WHERE W.PRIMARYKEY = p_tkt); 
commit; 
delete from PMP_BPM_TROUBLETICKET_ACTIVITY a 
where a.primarykey = p_tkt; 
commit; 
delete from PMP_BPM_TROUBLETICKET a where a.id = p_tkt; 
commit; 

end loop; 
end; 

감사합니다.

+0

을 쓸 수 있습니까? 대부분의 삭제 명령은 외래 키 제약 조건을 통해 더 잘 수행되어야합니다. 그리고 실제로 루프는 필요하지 않습니다. –

+0

절차에 매개 변수가 필요하지 않습니다! –

+0

@WernfriedDomscheit 내 프로 시저가 아니므로 C# – Bilal

답변

1

당신은 어떤 documentation을 확인 했습니까, 이것은 아주 기본적인 것입니다 :

string constr = "User Id=scott;Password=tiger;Data Source=oracle"; 
OracleConnection con = new OracleConnection(constr); 
con.Open(); 

OracleCommand cmd = new OracleCommand("BEGIN p_delete_tt_duration_10min; END;", con); 
// Auto-commit changes 
cmd.ExecuteNonQuery(); 

// Clean up 
cmd.Dispose(); 
con.Dispose(); 

또한 왜 당신이 각 삭제 한 후 COMMIT해야합니까

OracleCommand cmd = new OracleCommand("p_delete_tt_duration_10min", con); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.ExecuteNonQuery(); 
+0

도움을 주셔서 감사합니다, 예, 많이 검색했지만 매개 변수와 혼동 스러웠습니다. 이제는 작동하고 있습니다. – Bilal