6.8.09

Article: Error calling PL SQL stored procedure in .NET - Artículo: Error llamando a un procedimiento almacenado PL SQL desde .NET

[English/ Inglés]

Problem:

When PL SQL stored procedure is called from C# code, it returns this error:

ORA-06550: line 1, column 7:
PLS-00201: identifier 'modificar_prueba' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


PL SQL stored procedure:

create or replace package body PRUEBA is

PROCEDURE modificar_ prueba (p_co_prueba varchar2, p_ds_prueba varchar2)
AS
BEGIN

INSERT INTO TB_PRUEBA(CO_PRUEBA,DS_ PRUEBA)
VALUES(p_co_prueba, p_ds_prueba);

END;

end PRUEBA;


C# code:

OracleCommand execModificarCodCap = new OracleCommand();
execModificarCodCap.Connection = oracleConnection1;

execModificarCodCap.CommandText = " modificar_prueba";

execModificarCodCap.CommandType = CommandType.StoredProcedure;

execModificarCodCap.Parameters.Add(new OracleParameter("p_co_prueba ", OracleType.VarChar)).Direction = ParameterDirection.Input;
execModificarCodCap.Parameters.Add(new OracleParameter("p_ds_prueba ", OracleType.VarChar)).Direction = ParameterDirection.Input;
execModificarCodCap.Parameters.Add(new

execModificarCodCap.Parameters["p_co_prueba"].Value = textBoxCodigoPrueba.Text;
execModificarCodCap.Parameters["p_ds_prueba"].Value = textBoxDescripcionPrueba.Text;

execModificarCodCap.ExecuteNonQuery();

MessageBox.Show("Se almacenaron los cambios”,
"Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);

//Se cierra la conexión de BD
oracleConnection1.Close();


Cause:

In the instruction:

execModificarCodCap.CommandText = "modificar_prueba";

The package has not been defined and this is the reason because Oracle can not find it.


Solution:

Add package “PRUEBA” to the instruction:

execModificarCodCap.CommandText = "modificar_prueba";

The correct intruction is:

execModificarCodCap.CommandText = "PRUEBA.modificar_prueba";



More information:

MSDN article: Accessing Oracle 9i Stored Procedures Using ADO.NET



[Español/ Spanish]

Problema:

Cuando ejecuto un procedimiento almacenado en C# me devuelve el siguiente error:

ORA-06550: line 1, column 7:
PLS-00201: identifier 'modificar_prueba' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


El procedimiento PL SQL es el siguiente:

create or replace package body PRUEBA is

PROCEDURE modificar_ prueba (p_co_prueba varchar2, p_ds_prueba varchar2)
AS
BEGIN

INSERT INTO TB_PRUEBA(CO_PRUEBA,DS_ PRUEBA)
VALUES(p_co_prueba, p_ds_prueba);

END;

end PRUEBA;

El código c# que ejecutó es:

OracleCommand execModificarCodCap = new OracleCommand();
execModificarCodCap.Connection = oracleConnection1;

execModificarCodCap.CommandText = " modificar_prueba";

execModificarCodCap.CommandType = CommandType.StoredProcedure;

execModificarCodCap.Parameters.Add(new OracleParameter("p_co_prueba ", OracleType.VarChar)).Direction = ParameterDirection.Input;
execModificarCodCap.Parameters.Add(new OracleParameter("p_ds_prueba ", OracleType.VarChar)).Direction = ParameterDirection.Input;
execModificarCodCap.Parameters.Add(new

execModificarCodCap.Parameters["p_co_prueba"].Value = textBoxCodigoPrueba.Text;
execModificarCodCap.Parameters["p_ds_prueba"].Value = textBoxDescripcionPrueba.Text;

execModificarCodCap.ExecuteNonQuery();

MessageBox.Show("Se almacenaron los cambios”,
"Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);

//Se cierra la conexión de BD
oracleConnection1.Close();


Causa:

En la instrucción:

execModificarCodCap.CommandText = "modificar_prueba";

No se ha definido el paquete donde está el procedimiento y por eso no puede encontrarlo.


Solución:

Añadir el paquete a la instrucción:

execModificarCodCap.CommandText = "modificar_prueba";

El valor correcto sería:

execModificarCodCap.CommandText = "PRUEBA.modificar_prueba";

Más información:

Artículo en MSDN: Accessing Oracle 9i Stored Procedures Using ADO.NET