У меня есть блок кода, и я назначаю значения переменной, чтобы отслеживать, что происходит во время выполнения блока.
begin
declare
stage number := 0;
begin
stage := 1;
INSERT INTO Country ( code, name) VALUES (1 , 'xxxx');
stage := 2;
INSERT INTO City ( code, name) VALUES (1 , 'yyyy');
DBMS_OUTPUT.PUT_LINE('DONE:');
COMMIT;
EXCEPTION -- exception handlers begin
WHEN OTHERS THEN -- handles all other errors
DBMS_OUTPUT.PUT_LINE('Error occured, rollback...');
DBMS_OUTPUT.get_LINE(:1, :2);
stage := -1;
ROLLBACK;
end;
end;
Я хочу спросить вас, как я могу получить значение сцены и значение внутри DBMS_OUTPUT.PUT_LINE() с помощью С#. Я знаю, что это уже ответили, но, к сожалению, я не нашел его.
using (OracleCommand cmd = cnn.CreateCommand())
{
OracleParameter status = new OracleParameter(":1", OracleType.VarChar, 32000);
p_line.Direction = ParameterDirection.Output;
OracleParameter line = new OracleParameter(":2", OracleType.Double);
p_status.Direction = ParameterDirection.Output;
OracleParameter stage= new OracleParameter("stage", OracleType.Int16);
p_country_name.Direction = ParameterDirection.Output;
cmd.CommandText = script;
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(status);
cmd.Parameters.Add(line );
cmd.Parameters.Add(stage);
cmd.ExecuteNonQuery();
string status = status.Value.ToString();
string line = line.Value.ToString();
string stage= stage.Value.ToString();
}
Вы можете читать DBMS_OUTPUT! Это может быть полезно для асинхронной связи
FUNCTION get_next_line RETURN VARCHAR2
IS
return_value VARCHAR2(255);
get_status INTEGER;
BEGIN
DBMS_OUTPUT.GET_LINE (return_value, get_status);
IF get_status = 0
THEN
RETURN return_value;
ELSE
RETURN NULL;
END IF;
END;
Но я бы не рекомендовал его использовать в общем случае. Вам нужен выходной параметр или функция, подобная приведенному выше примеру.
Я сомневаюсь, что С# сможет читать буфер dbms_output.
Однако вы можете записать сохраненную процедуру plsql для этого кода и передать параметр из этой процедуры на С#
Я новичок в С#. Хотите написать запрос блока PL и получить значение.
StringBuilder sb = new StringBuilder();
sb.Append(" declare ");
sp.Append(" v_acid varchar(10);");
sp.Append(" v_Cid varchar(10);");
sp.Append(" begin ");
sp.Append(" select acid,cust into v_acid,v_Cid from account where account='112111' ");
sp.Append(" end ");
Я хочу запустить PL-блок, написанный в вышестрочном файле в oracle-соединении.