Oracle未执行语句句柄 C,.NET Oracle ORA-24338“语句句柄未执行”错误和一个存储过程中的某些错误...

我有以下存储过程

create or replace PROCEDURE WEB_AC

(

v_iDocid IN NUMBER DEFAULT NULL ,

v_valor IN VARCHAR2 DEFAULT NULL ,

v_campo IN VARCHAR2 DEFAULT NULL ,

v_error OUT NUMBER

)

AS

v_campoid NUMBER(5,0);

v_tipodato VARCHAR2(50);

v_DOCTYPE NUMBER;

v_tabla VARCHAR2(50);

v_procedure VARCHAR2(70);

BEGIN

v_error:= 0;

IF v_valor IS NULL

OR v_valor IS NULL

OR LENGTH(TRIM(v_valor)) = 0 THEN

BEGIN

v_error:= 3;

END;

else

Begin

bEGIN

SELECT campoid,

doctype,

tipodato

INTO v_campoid,

v_DOCTYPE,

v_tipodato

FROM TiposDocumento t

, DIGITALIZAMAIN d

, CatCamposDocumento c

where

c.tabla=t.tabla and

nombre=v_campo and

doctype = TipoDocumentoID and

docid = v_iDocid AND

Mostrar = 1;

EXCEPTION

WHEN OTHERS THEN

v_campoid := 0;

END;

--select @campoid

IF v_campoid != 0 THEN

Begin

EXECUTE IMMEDIATE 'BEGIN ABANCE3.WEB_UPDOC' || TRIM(TO_CHAR(v_DOCTYPE )) || 'C' || TRIM(TO_CHAR(v_campoid)) ||'(' ||

TO_CHAR (v_iDocid)||' , '||CHR(39)||v_valor||CHR(39)||',:2);END;'

USING out v_error;

END;

END IF;

end;

end if;

END;

create or replace PROCEDURE WEB_UPDOC1C6(v_idreg NUMBER,v_valor VARCHAR2,v_temp OUT NUMBER)

AS

v_sys_error NUMBER := 0;

BEGIN

BEGIN

SELECT count(*)

INTO v_sys_error

FROM DOC1

where DOCID = v_idreg;

EXCEPTION WHEN OTHERS THEN v_sys_error:=0;

END;

IF v_sys_error > 0 THEN

BEGIN

BEGIN

UPDATE DOC1

SET DESCRIPCION = v_valor

WHERE DOCID = v_idreg;

EXCEPTION WHEN OTHERS THEN v_sys_error:=0;

END;

IF v_sys_error = 0 THEN v_temp:=0 ;

ELSE v_temp:=1 ;

END IF;

END;

END IF;

END;

我从一个应用程序调用它们,代码如下:

Friend Function ActualizaCampos(ByVal iDocID As Long, ByVal valor As String, ByVal Campo As String, ByVal ProyectoID As Integer) As String

Dim mstrCS as String = "Here goes the connection String to my server"

Dim db As Database

Dim dbCW As DbCommand

Dim iValor As String = "0"

Select Case Me.TipoBD

Case GlobalDef.eTipoBD.Oracle

db = New OracleDatabase(mstrCS)

dbCW = db.GetStoredProcCommand(WEB_AC, iDocid, valor, Campo, 0)

db.ExecuteNonQuery(dbCW)

Case GlobalDef.eTipoBD.SQLServer

db = New SqlDatabase(mstrCS)

dbCW = db.GetStoredProcCommand(WEB_AC, iDocid, valor, Campo)

iValor = db.ExecuteScalar(dbCW).ToString()

End Select

Return iValor

End Function

在这个例子中,

WEB_AC SP

始终执行SP

WEB_UPDOC1C6

我有两个问题。

第一个问题:

在应用程序的某个时刻,我有

valor

参数(在VisualBasic函数中)是一个字符串,其中包含类似于

“一些带空格的字符串”

. 发生这种情况时,存储过程不会更新表。如果我直接在数据库中执行sp(使用SQL开发人员),一切都可以正常工作。我知道这与缺少引号(“)的字符串有关,但我还没有使它起作用。有什么想法吗?

第二个问题:

有时,在调试应用程序时,如果我中断了执行,我就开始获取

ORA-24338“未执行语句句柄”错误

每次我尝试再次执行它,都要花上几个小时。我相信这与一笔未结交易有关。但老实说,由于我刚接触甲骨文,我真的不知道问题可能是什么。

你能帮助我吗?

更新:

我找到了ORA-24338的真正原因。导致错误的是另一个SP。当我找到其他问题的解决方案时,我会把它全部贴在这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值