반응형
.NET의 저장 프로시저에서 오라클 출력 매개 변수를 반환하는 방법
SP에서 데이터를 되찾기 위해 심각한 문제를 겪고 있습니다.저는 이렇게 하려고 했습니다.
OracleCommand ora_cmd = new OracleCommand("a6r1.PR_ABC_P_ALTA_TARJETA_PAYWARE", ora_conn);
ora_cmd.BindByName = true;
ora_cmd.CommandType = CommandType.StoredProcedure;
int success= new int();
ora_cmd.Parameters.Add("Lc_Param_Issuer", OracleDbType.Varchar2, issuer, ParameterDirection.Input);
ora_cmd.Parameters.Add("Ln_Param_Valid_Product", OracleDbType.Varchar2, DropDownListProducto.SelectedValue.ToString(), ParameterDirection.Input);
ora_cmd.Parameters.Add("Ln_Param_Total", OracleDbType.Int32, parsed, ParameterDirection.Input);
ora_cmd.Parameters.Add("Lc_Param_User", OracleDbType.Varchar2, user, ParameterDirection.Input);
ora_cmd.Parameters.Add("Lc_Encrypted_Password", OracleDbType.Varchar2, pass, ParameterDirection.Input);
ora_cmd.Parameters.Add("Lc_Exito", OracleDbType.Int32, success, ParameterDirection.Output);
ora_cmd.Parameters.Add("Lc_Error", OracleDbType.Varchar2, errorMessage, ParameterDirection.Output);
그러나 success 또는 errorMessage 변수에 아무것도 반환하지 않습니다.내가 뭘 잘못하고 있는 거지?더 좋은 방법이 있습니까?Oracle에서 직접 실행할 때 잘 작동합니다.
기존 변수를 출력 매개 변수로 사용할 수 없습니다. 대신 이 방법을 사용하십시오.
ora_cmd.Parameters.Add("Lc_Exito", OracleDbType.Int32).Direction = ParameterDirection.Output;
ora_cmd.ExecuteNonQuery();
if (ora_cmd.Parameters["Lc_Exito"].value == 0)
전체 프로세스를 한 곳에서 문서화하는 곳을 찾지 못했기 때문에, 머리를 벽에 부딪히고 쾅 소리를 낸 후, OP 코드의 출력 매개 변수 중 하나를 사용하여 제가 생각해 낸 버전은 다음과 같습니다.
OracleParameter param = new OracleParameter();
param = ora_cmd.Parameters.Add("Lc_Exito", OracleDbType.Int32, ParameterDirection.Output); // can assign the direction within the parameter declaration
param.Size = 25; // failed for me if I did not have this - should be the same as the DB field, if exporting a value from the database
ora_cmd.ExecuteNonQuery();
int myLc_ExitoValue = int.Parse(param.Value); // might not need to parse, and might need a .ToString() on param.Value if you do - I was using strings so not sure about OP's exact case
그런 다음 저장 프로시저를 사용할 수 있도록 설정해야 합니다.OUT
매개 변수를 지정해야 합니다. 절차에 할당해야 합니다.
create or replace procedure PR_ABC_P_ALTA_TARJETA_PAYWARE(Lc_Exito OUT number)
as
begin
Lc_Exito := 123;
end;
/
분명히 이것은 전송되는 다른 모든 매개 변수와 다른 "아웃" 매개 변수를 제외하고 단순화하기를 원했습니다.그러나 이것은 C#의 저장 프로시저에 대한 호출 전, 중, 후의 모든 설정 방법과 설정 방법을 보여줍니다.OUT
저장 프로시저의 매개 변수 및 값을 가져옵니다.
언급URL : https://stackoverflow.com/questions/14247921/how-to-return-oracle-output-parameters-from-a-stored-procedure-in-net
반응형
'programing' 카테고리의 다른 글
수직 gem_vline을 클래스 날짜의 x축으로 가져오는 방법은 무엇입니까? (0) | 2023.06.07 |
---|---|
루비에서 현재 작업 디렉터리의 절대 경로를 얻는 방법은 무엇입니까? (0) | 2023.06.07 |
큰 숫자와 함께 DEC2BIN() 사용 (0) | 2023.06.07 |
Asp.net core 2.0에서 log4net을 사용하는 방법 (0) | 2023.06.07 |
봄 데이터 JPA의 항목 목록을 포함 쿼리를 사용하여 여러 열 검색 (0) | 2023.06.07 |