2016-12-13 3 views
0

Привет, я пытаюсь создать функцию для восстановления последовательности для синхронизации с идентификаторами таблицы, которые вышли из синхронизации с последовательностью. Функция выглядит следующим образом:Выполнить немедленную выписку вопроса - имя поля переменной и имя таблицы

create or replace 
FUNCTION P_FNC_SEQUENCERESET(sourceTable IN VARCHAR2, idField IN VARCHAR2, seqname VARCHAR2) RETURN NUMBER 
IS 
ln NUMBER; 
ib NUMBER; 
maxId NUMBER; 
newValue NUMBER; 
diffValue NUMBER; 
interimValue NUMBER; 
sqlStmt VARCHAR2(2000); 

BEGIN 

-- Get the maximum of the id field 
EXECUTE IMMEDIATE 'SELECT MAX(' || idField || ') INTO ' || maxId || ' FROM ' || sourceTable; 

...code continues... 

Мое понимание EXECUTE IMMEDIATE заявление наводит меня на мысль, что это должно быть возможно, однако при выполнении я получаю эту ошибку:

ORA-00936: missing expression
ORA-06512: at "PSALERT_ADMIN.P_FNC_SEQUENCERESET", line 16
ORA-06512: at line 11

ответ

1

Это нужно будет искать что-то как это:

EXECUTE IMMEDIATE 'SELECT ' || idField ||' FROM ' || sourceTable into maxid; 

ключевое слово «в» не является частью строки, которая динамически выполняемый, но она является частью синтаксиса «выполнить немедленно» заявление

https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm

+0

Я пропустил SELECT Max ('|| элемент из исходного сообщения. Но ваши ответы все еще на месте. Очень признателен. –

+0

@PaulJohnson Я скопировал выбор из вопроса - может быть, вопрос был отредактирован? Или это было просто для поощрения внимательного чтения ;-) – sers

Смежные вопросы