Hola, estoy desarrollando una aplicacion con Visual basic 2005 Express edition y como servidor de datos Oracle Database 10g Express Edition, he desarrollado un procedimiento almacenado para operaciones de insercion en la tabla DOCU_PLANTILLAS, si ejecuto el procedimiento almacenado en SQL*Plus o Oracle SQL Developer, trabaja bien; pero, si realizo una llamada al procedimiento desde VB2005, me genera un error:
Buffer de caracteres demasiado pequeño, numèrico o de valor.
Mi procedimiento es llamado desde VB2005 con nombres de parámetros similares a los del Procedimiento Oracle, aquí los scripts:
create or replace
PROCEDURE "SP_ADD_DOCU_PLANTILLAS"
(P_NUM_DOC_PLANTILLA number
, p_nombre_documento IN VARCHAR2
, p_aplicacion IN VARCHAR2
, p_ABREVIA_archivo IN VARCHAR2
, p_nombre_archivo IN VARCHAR2
, p_creado_por IN VARCHAR2
, p_creado_el IN DATE
, p_modificado_el IN DATE
,P_dir_doc_generado in VARCHAR2
,p_campos_documentos varchar2
) AS
LOB_bfile Bfile;
LOB_blob Blob;
BEGIN
--
--Agrega un reegistro a la tabla PADRE.
insert into DOCU_PLANTILLAS
values(p_num_doc_plantilla,
p_nombre_documento,
p_aplicacion,
p_abrevia_archivo,
empty_Blob(),
'msword/object',
p_creado_por,
p_creado_el,
p_modificado_el,
P_dir_doc_generado,
bfilename('PLANTILLASDOCSS',p_nombre_archivo)
);
SP_XTRAC_CHARS_ADD_DOCS(0,p_num_doc_plantilla,p_ca mpos_documentos,'DOCU_PLANTILLAS_CAMPOS');
/* return Archivo_BLOB into lob_blob;
lob_bfile:=bfilename('PLANTILLASDOCS','HIPOTECA ABIERTA.dot');
dbms_lob.FILEOPEN(lob_bfile,'r');
dbms_lob.loadfromfile(lob_blob,lob_bfile,dbms_lob. GETLENGTH(lob_bfile));
*/
Commit;
exception
when DUP_VAL_ON_INDEX then
raise_application_error(-20001,'Clave primaria o índice único duplicado.');
WHEN OTHERS then
raise_application_error(-20025,SQLERRM);
END SP_ADD_DOCU_PLANTILLAS;
************************************************** ***********************************************
************************************************** ***********************************************
Public Sub GrabarDocsPlantillas( _
ByVal P_NUM_DOC_PLANTILLA As Long _
, ByVal p_nombre_documento As String _
, ByVal p_aplicacion As String _
, ByVal p_ABREVIA_archivo As String _
, ByVal p_nombre_archivo As String _
, ByVal p_creado_por As String _
, ByVal p_creado_el As Date _
, ByVal p_modificado_el As Date _
, ByVal P_dir_doc_generado As String _
, ByVal p_campos_documentos As String)
REM Comandos para Stored procedures de Oracle Database.
Dim OracleCmdSP As New OracleClient.OracleCommand
Try
OracleCmdSP.CommandType = CommandType.StoredProcedure
OracleCmdSP.CommandText = "SP_ADD_DOCU_PLANTILLAS"
OracleCmdSP.Connection = OracleConexion
OracleCmdSP.Parameters.Add("P_NUM_DOC_PLANTILLA", OracleClient.OracleType.Number, 16).Value = _
P_NUM_DOC_PLANTILLA
OracleCmdSP.Parameters.Add("p_nombre_documento", OracleClient.OracleType.VarChar, 50).Value = _
p_nombre_documento
OracleCmdSP.Parameters.Add("p_aplicacion", OracleClient.OracleType.VarChar, 500).Value = _
p_aplicacion
OracleCmdSP.Parameters.Add("p_ABREVIA_archivo", OracleClient.OracleType.VarChar, 4000).Value = _
p_ABREVIA_archivo
OracleCmdSP.Parameters.Add("p_nombre_archivo", OracleClient.OracleType.VarChar, 4000).Value = _
p_nombre_archivo
OracleCmdSP.Parameters.Add("p_creado_por", OracleClient.OracleType.VarChar, 32).Value = _
p_creado_por
OracleCmdSP.Parameters.Add("p_creado_el", OracleClient.OracleType.DateTime).Value = _
p_creado_el
OracleCmdSP.Parameters.Add("p_modificado_el", OracleClient.OracleType.DateTime).Value = _
p_modificado_el
OracleCmdSP.Parameters.Add("P_dir_doc_generado", OracleClient.OracleType.VarChar, 4000).Value = _
P_dir_doc_generado
OracleCmdSP.Parameters.Add("p_campos_documentos", OracleClient.OracleType.VarChar, 4000).Value = _
p_campos_documentos
Dim RecordsAdd As Integer = OracleCmdSP.ExecuteNonQuery()
MessageBox.Show("Se agregaron " & RecordsAdd.ToString & " registros", "Atlas Doc 1.0")
OracleCmdSP.Dispose()
Catch Oraex As OracleClient.OracleException
MessageBox.Show(Oraex.Message, "Atlas Doc 1.0:[Error]", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
************************************************** ***********************************************
************************************************** ***********************************************
strCadenaGenerada = AtlasDocControlesOperaciones.GenerarCadenaDesdeDGV GeneraDocsPLantillas(Me.DataGridView1)
AtlasDocsProcesosBasesDeDatos.GrabarDocsPlantillas (
Long.Parse(TxtNumDocuPlantilla.Text),
Me.TxtNombrePlantillaDoc.Text _
, Me.TxtAplicacion.Text, Me.TxtAbreviatura.Text, Me.TxtNombrePlantillaDoc.Text, "DBA", _
Me.DtmPickCreadoEl.Value.Date _
, Me.DtmPickModificadoEl.Value.Date, Me.TxtRutaDelArchivo.Text, strCadenaGenerada)