代码之家  ›  专栏  ›  技术社区  ›  Bilal

在C中调用存储Oracle过程#

  •  1
  • Bilal  · 技术社区  · 9 年前

    所以我想在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;
    

    提前谢谢。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Wernfried Domscheit    9 年前

    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();
    

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