Недавно я перенес некоторые из своих кодов для использования OracleTransaction из ODP.NET
У меня есть следующие коды PL / SQL:
для родительской таблицы
CREATE OR REPLACE FUNCTION insertneworder (
orderdate IN orders.order_date%TYPE,
orderdescription IN orders.order_description%TYPE
)
RETURN orders.order_id%TYPE
IS
orderid orders.order_id%TYPE;
BEGIN
INSERT INTO orders
(order_date, order_description
)
VALUES (orderdate,orderdescription
)
RETURNING order_id
INTO orderid;
RETURN orderid;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END insertneworder;
Триггер родительской таблицы
CREATE OR REPLACE TRIGGER bi_orders_pk
BEFORE INSERT
ON orders
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
SELECT TO_CHAR (SYSTIMESTAMP, 'yyyymmddhh24missff3')
INTO :NEW.order_id
FROM DUAL;
END;
для дочерней таблицы
CREATE OR REPLACE PROCEDURE insertneworderdetails (
orderid IN order_details.order_id%TYPE,
quantity IN order_details.quantity%TYPE,
productid IN order_details.prod_id%TYPE,
itemcost IN order_details.itemcost%TYPE
)
IS
BEGIN
INSERT INTO order_details
(order_id, quantity, prod_id, itemcost
)
VALUES (orderid, quantity, productid, itemcost
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END insertneworderdetails;
Триггер дочерней таблицы
CREATE OR REPLACE TRIGGER bi_order_details_pk
BEFORE INSERT
ON order_details
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
SELECT TO_CHAR (SYSTIMESTAMP, 'yyyymmddhh24missff3')
INTO :NEW.item_id
FROM DUAL;
END;
Предполагая, что я создал OracleCommand для insertneworder и insertneworderdetails, я передам егок этому коду ...
public static bool ExecuteTransaction(List<OracleCommand> command)
{
OracleConnection conn;
conn = OraConnection.Instance.OracleConnection;
if (conn.State == ConnectionState.Closed) {
conn.Open();
}
OracleTransaction trans;
trans = conn.BeginTransaction();
try
{
foreach (OracleCommand cmd in command)
{
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
return false;
}
return true;
}
МОЙ ВОПРОС IS "Как передать идентификатор таблицы PARENT, возвращенной функцией insertneworder, в insertneworderdetails через OracleCommand"?
ЛЮБАЯ ПОМОЩЬ ОЧЕНЬ ЦЕНА ...