Попытка присвоить одно значение из запроса к переменной ... что я делаю не так? - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь установить переменную (v_flag_id) для результата запроса.Я искал в Интернете примеры, и кажется, что мой формат / синтаксис правильный.Что я делаю неправильно?Заранее спасибо.

create or replace PROCEDURE RUN_AGG
is
declare
    v_Flag_id Number := select flag_id from flag where flag_tx = 'Processed / Calculated';

CURSOR hours IS
  SELECT distinct(HR) as RHR
  , submission_value_id
  from (
  select  
      v.DATA_DATE,
      v.HR,
      sv.submission_value_id
   from value v
   inner join submission_value sv on sv.value_id = v.value_id
   where sv.SUBMISSION_VALUE_ID NOT IN (
      SELECT SUBMISSION_VALUE_ID FROM VALUE_FLAG WHERE VALUE_FLAG.FLAG_ID = v_Flag_id 
   );
BEGIN
OPEN hours;
 LOOP

FETCH hours into l_hr;
EXIT WHEN hours%NOTFOUND;
  AGG_HOURLY_REG_FINAL(l_hr.RHR);
END LOOP;
CLOSE hours;
END RUN_AGG;

Я получаю следующую ошибку:

Error(6,1): PLS-00103: Encountered the symbol "DECLARE" when expecting one 
of the following:     begin function pragma procedure subtype type <an 
identifier>    <a double-quoted delimited-identifier> current cursor delete    
 exists prior external language 

1 Ответ

0 голосов
/ 07 июня 2018

Используйте следующее:

CREATE OR REPLACE PROCEDURE RUN_AGG IS
 l_rhr       VARCHAR2 (100);
 l_sub_vl_id VARCHAR2 (100);

 CURSOR hours is
  SELECT distinct (HR) as RHR, submission_value_id
    FROM (SELECT v.DATA_DATE, v.HR, sv.submission_value_id
            FROM value_ v
           INNER JOIN submission_value sv
              ON (sv.value_id = v.value_id)
           WHERE sv.SUBMISSION_VALUE_ID NOT IN
                 (SELECT SUBMISSION_VALUE_ID
                    FROM VALUE_FLAG
                   WHERE VALUE_FLAG.FLAG_ID in
                         (SELECT flag_id
                            FROM flag
                           WHERE flag_tx = 'Processed / Calculated')));
BEGIN
 OPEN hours;
 LOOP
    FETCH hours INTO l_rhr, l_sub_vl_id;
  EXIT WHEN hours%NOTFOUND;
  AGG_HOURLY_REG_FINAL(l_rhr);
 END LOOP;
 CLOSE hours;
END RUN_AGG;
  • удалить declare

  • принять select flag_id into v_Flag_id from flag where flag_tx = 'Processed / Calculated'; sql в часах выбора курсора.Итак, удалите v_Flag_id переменную.

  • верните две переменные для двух столбцов l_rhr и l_sub_vl_id.
  • Я заменил имя таблицы value на value_, поскольку это зарезервированное ключевое слово для oracle.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...