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;
Я называю эту процедуру в анонимный блок Like This (Скачать XML-данных здесь: Link)Oracle 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 элементов, например удаляю некоторые элементы. это прекрасно работает.
Не уверен, что я вполне понимаю, как вы присваиваете/передавая документ, связанный с. Но это более чем 32 тыс. Символов, поэтому вы не можете назначить его CLOB в виде строкового литерала. Ваша конкатенация внутри процедуры также не сработает. Откуда идет документ? Возможно, вам придется прочитать его где-нибудь в кусках и добавить его в переменную CLOB. –
Я вызываю процедуру logincheck (sqlqry =>) из моего .net-кода, а параметр sqlqry передается из .net вместе с xml-данными, которое составляет около 5 МБ. начало begin_name; строка создается в .net и передается параметру sqlqry. поэтому мне не нужно добавлять clm clm: = To_Clob ('begin' || sqlqry || '; end;'); в logincckck (sqlqry => параметр). также я не могу создать кусок xml. –
Я отправляю sqlqry-параметр как OracleDbType.Clob из .net-кода, но получаю такую же ошибку pls-00172 –