Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回一个变量值并从PL/SQL代码块输出到C_C#_Sql_Oracle_Plsql_Ado.net - Fatal编程技术网

C# 返回一个变量值并从PL/SQL代码块输出到C

C# 返回一个变量值并从PL/SQL代码块输出到C,c#,sql,oracle,plsql,ado.net,C#,Sql,Oracle,Plsql,Ado.net,我有一个代码块,我给一个变量赋值,以便在执行代码块时跟踪正在发生的事情 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.PU

我有一个代码块,我给一个变量赋值,以便在执行代码块时跟踪正在发生的事情

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; 

我想问你如何使用C获取阶段值和DBMS_OUTPUT.PUT_行中的值。我知道这已经得到了回答,但不幸的是我没有找到它。

我怀疑C是否能够读取DBMS_输出缓冲区


但是,您可以为此代码编写一个存储的plsql过程,并将该过程中的参数传递给C,您可以从DBMS\U输出读取! 这对于异步通信可能很有用

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;

但我不建议在一般情况下使用它。您需要一个输出参数或函数,如上面的示例。

我是c语言的新手。要编写pl块查询并获取值

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

我想在oracle connection中运行上面用stringbuilder编写的pl块。

谢谢您的回答,但这不是我的问题。我问我如何读取stage变量和DBMS_OUTPUT.PUT_行的C代码。函数是如何返回stage变量的示例。不要读取dbms_输出。在代码中放入行,使用out参数。谢谢你的回答,但这不是我的问题。我问我如何在C代码中读取stage变量和DBMS_OUTPUT.PUT_行。stage变量对我不起作用,我必须使用以下技巧:将stage选择为:stage FROM dual;