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