Следующая моя хранимая процедура. Это дает мне ошибку:
(PLS-00103 (65: 199): PLS-00103: Обнаружен символ "(" при ожидании одного из следующего:.) @%).
Ошибка в этой строке:
v_SQLrecords := 'select distinct FEEDBACKQUESTIONS.FeedbackQuestionId as id,' || p_cols || ' ' || v_SQL || ' order by ' || p_cols || ' ' || p_order || ' OFFSET ' || CAST(p_rowsPerPage AS nvarchar2(500)) || ' * (' || CAST(p_pageNo AS nvarchar2(500)) || ' - 1) ROWS FETCH NEXT ' || CAST(p_rowsPerPage AS nvarchar2(500)) || ' ROWS ONLY'
Пожалуйста, предложите мне.
CREATE OR REPLACE PROCEDURE GetFeedbackQuestions (
p_LanguageName NCLOB DEFAULT NULL,
p_Crd timestamp DEFAULT NULL,
p_CrdBy number DEFAULT NULL,
p_IsDisabled number DEFAULT NULL,
p_LanguageId number DEFAULT NULL,
p_Lmd timestamp DEFAULT NULL,
p_LmdBy number DEFAULT NULL,
p_Question nvarchar2 DEFAULT NULL,
p_SequenceNo number DEFAULT NULL,
p_RowCount number DEFAULT NULL,
p_rowsPerPage number DEFAULT 10,
p_pageNo number DEFAULT 1,
p_cols NCLOB DEFAULT 'FeedbackQuestionId',
p_order NCLOB DEFAULT 'desc',cur OUT SYS_REFCURSOR)
AS
v_SQL NCLOB := ' from FEEDBACKQUESTIONS left join LANGUAGES on FEEDBACKQUESTIONS.LanguageId = LANGUAGES.LanguageId where 1=1 ';
v_ParamDefinition NCLOB;v_SQLrecords NCLOB;
BEGIN
IF (p_LanguageName IS NOT NULL)
THEN
v_SQL := v_SQL || ' and LANGUAGES.LanguageName like ''%' || p_LanguageName || '%''';
END IF;
IF (p_Crd IS NOT NULL)
THEN
v_SQL := v_SQL || ' and cast(FEEDBACKQUESTIONS.Crd as date) = p_Crd';
END IF;
IF (p_CrdBy IS NOT NULL)
THEN
v_SQL := v_SQL || ' and FEEDBACKQUESTIONS.CrdBy = p_CrdBy';
END IF;
IF (p_IsDisabled IS NOT NULL)
THEN
v_SQL := v_SQL || ' and FEEDBACKQUESTIONS.IsDisabled = p_IsDisabled';
END IF;
IF (p_LanguageId IS NOT NULL)
THEN
v_SQL := v_SQL || ' and FEEDBACKQUESTIONS.LanguageId = p_LanguageId';
END IF;
IF (p_Lmd IS NOT NULL)
THEN
v_SQL := v_SQL || ' and cast(FEEDBACKQUESTIONS.Lmd as date) = p_Lmd';
END IF;
IF (p_LmdBy IS NOT NULL)
THEN
v_SQL := v_SQL || ' and FEEDBACKQUESTIONS.LmdBy = p_LmdBy';
END IF;
IF (p_Question IS NOT NULL)
THEN
v_SQL := v_SQL || ' and FEEDBACKQUESTIONS.Question like ''%' || p_Question || '%''';
END IF;
IF (p_SequenceNo IS NOT NULL)
THEN
v_SQL := v_SQL || ' and FEEDBACKQUESTIONS.SequenceNo = p_SequenceNo';
END IF;
v_ParamDefinition := 'p_LanguageName NCLOB,p_Crd TIMESTAMP(3) , p_CrdBy NUMBER(19) , p_IsDisabled NUMBER(1) , p_LanguageId NUMBER(19) , p_Lmd TIMESTAMP(3) , p_LmdBy NUMBER(19) , p_Question NCLOB , p_SequenceNo NUMBER(19) ';
IF (p_cols IS NOT NULL)
THEN
p_cols := 'FEEDBACKQUESTIONS.' || p_cols || '';
END IF;
**v_SQLrecords := 'select distinct FEEDBACKQUESTIONS.FeedbackQuestionId as id,' || p_cols || ' ' || v_SQL || ' order by ' || p_cols || ' ' || p_order || ' OFFSET ' || CAST(p_rowsPerPage AS nvarchar2(500)) || ' * (' || CAST(p_pageNo AS nvarchar2(500)) || ' - 1) ROWS FETCH NEXT ' || CAST(p_rowsPerPage AS nvarchar2(500)) || ' ROWS ONLY';**
EXECUTE IMMEDIATE v_SQLrecords using
v_ParamDefinition,
p_LanguageName,
p_Crd,
p_CrdBy,
p_IsDisabled,
p_LanguageId,
p_Lmd,
p_LmdBy,
p_Question,
p_SequenceNo;
v_ParamDefinition := v_ParamDefinition || ', @RowCountOUT NCLOB OUTPUT';
v_SQLrecords := 'select @RowCountOUT =count(distinct FEEDBACKQUESTIONS.FeedbackQuestionId) ' || v_SQL;
EXECUTE IMMEDIATE v_SQLrecords using
v_ParamDefinition,
p_LanguageName,
p_Crd,
p_CrdBy,
p_IsDisabled,
p_LanguageId,
p_Lmd,
p_LmdBy,
p_Question,
p_SequenceNo,
RowCountOUT := p_RowCount OUT
OPEN cur FOR SELECT
p_RowCount FROM dual;
END;