2015-12-28 3 views
1

Я пытаюсь избавиться от дублирующих ролей работы до того, как данные будут введены в мою фактическую таблицу размеров, каждый раз, когда я запускаю свой сценарий, я все время получаю недостающую ошибку выражения, и я не уверен, почему, любая помощь будет в основном оценена.sql missing expression on select query in oracle

INSERT INTO job_role_dim (
SELECT job_role_id.nextval, DISTINCT job_role_desc 
FROM temp_job_role_dim); 
+0

Ваше размещение ключевого слова 'DISTINCT' предполагает, что у вас есть другое ожидание его эффекта, чем эффект, который он на самом деле имеет. 'DISTINCT' не квалифицирует отдельные столбцы; скорее он квалифицирует общее предложение SELECT, указывая, что не возвращаются повторяющиеся * строки *. –

ответ

3

Вы не должны иметь круглые скобки вокруг запроса, и ваш distinct находится в неправильном месте. Возможно, вы избегаете этого:

INSERT INTO job_role_dim 
SELECT DISTINCT job_role_id.nextval,job_role_desc 
FROM temp_job_role_dim; 

... который не удаляет дубликаты, а просто дает им разные значения последовательности. Таким образом, вам необходим подзапрос:

INSERT INTO job_role_dim 
SELECT job_role_id.nextval, job_role_desc 
FROM (
    SELECT DISTINCT job_role_desc 
    FROM temp_job_role_dim 
); 

Встроенный просмотр находит отличительные/уникальные значения; внешний запрос затем дает значение последовательности для каждого из них.

1

Это разработка ответа Алекса. Лучший способ написать этот запрос - использовать список столбцов для выбора. Это, как правило, действительно хорошая идея - и по другим причинам, чем просто круглые скобки вокруг запроса. Итак:

INSERT INTO job_role_dim(job_role_id, job_role_desc) -- making up these column names 
    SELECT job_role_id.nextval, job_role_desc 
    FROM (SELECT DISTINCT job_role_desc 
      FROM temp_job_role_dim 
     ) t; 

Т.е. SQL ожидает скобки после того, как таблица будет содержать список столбцов. И вот как вы должны написать свои заявления INSERT. Парсер путается, когда вы включаете подзапрос, потому что он ожидает список столбцов.