0
I have This Oracle 12c Procedure
CREATE OR REPLACE PROCEDURE LOGINCHECK(SQLQRY IN CLOB)
AS
C INTEGER;
N INTEGER;
RC SYS_REFCURSOR;
stmt clob:= To_Clob('begin ' || sqlqry || '; end;');
BEGIN
C := SYS.DBMS_SQL.OPEN_CURSOR;
SYS.DBMS_SQL.PARSE(C,stmt ,DBMS_SQL.native);
N := SYS.DBMS_SQL.EXECUTE(C);
SYS.DBMS_SQL.GET_NEXT_RESULT(C,RC);
SYS.DBMS_SQL.RETURN_RESULT(RC);
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
when OTHERS then
RAISE;
END LOGINCHECK;
我(从这里下载XML数据:Link)调用这个过程中匿名块像这样甲骨文12C CLOB数据类型是不工作
declare stmt clob := 'INWARDPKG.MACHINEINWARD_VALIDATING(XMLDOC => XMLTYPE.CREATEXML(paste xml from link))'; --The parameter value is a xml you can download it from above link
begin
LOGINCHECK(SQLQRY => STMT);
end;
但我得到的错误PLS-00172:字符串文字太长。
如果我将xml大小减小到40-50像删除一些元素一样。这工作正常。
不知道我很明白你是如何分配/传递您链接到文档。但是,这是超过32k个字符,因此您不能将它作为字符串文字分配给CLOB。程序中的连接也会失败。文件来自哪里?您可能需要从块中的某处读取它并将其附加到CLOB变量。 – 2014-10-20 10:30:11
我从我的.net代码调用logincheck(sqlqry => parameter)过程,并将sqlnet参数从.net传递到大约5 MB的xml数据。 begin procedure_name结束;字符串在.net中创建并传递给sqlqry参数。因此我不需要添加stmt clob:= To_Clob('begin'|| sqlqry ||'; end;');在logincheck(sqlqry =>参数)。我也无法创建大块的XML。 – 2014-10-20 10:50:04
我从.net代码发送sqlqry参数为OracleDbType.Clob,但得到相同的pls-00172错误 – 2014-10-20 11:06:47