Немедленно выполнить с ошибкой выброса переменной ORA-00936: отсутствует выражение - PullRequest
1 голос
/ 23 октября 2019

Ошибка пропущенного выражения, когда моя процедура достигает этого оператора. ORA-00936: отсутствует выражение Что не так с этим утверждением?

  EXECUTE IMMEDIATE 'SELECT /*+ parallel (8) */ COUNT(1)
  INTO '||v_datacount_backuptable||
  ' FROM cs_transassignment_26weeks';

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Что вы пытаетесь достичь, неясно. В любом случае вы не можете передать имя переменной как переменную .

Если вы хотите передать счет в переменную из фиксированного запроса, вы можете пропустить EXECUTE IMMEDIATE:он предназначен для выполнения динамически составленного запроса, что не имеет место в коде, который вы показали:

declare v_datacount_backuptable int;
begin
  SELECT /*+ parallel (8) */ COUNT(1) INTO v_datacount_backuptable FROM cs_transassignment_26weeks;
  dbms_output.put_line(v_datacount_backuptable);
end;
/

Если вы действительно построили запрос где-то еще и вам нужно его выполнить, то,Как уже ответил Littlefoot, вам нужно убрать предложение INTO из строки запроса:

declare 
    v_datacount_backuptable int;
    v_query varchar(500);
begin
  v_query := 'SELECT /*+ parallel (8) */ COUNT(1) FROM cs_transassignment_26weeks';
  EXECUTE IMMEDIATE v_query INTO v_datacount_backuptable;
  dbms_output.put_line(v_datacount_backuptable);
end;
/

Демонстрация по БД Fiddle

1 голос
/ 23 октября 2019

Должно быть

EXECUTE IMMEDIATE 'SELECT /*+ parallel (8) */ COUNT(1) FROM cs_transassignment_26weeks'
  INTO v_datacount_backuptable;

, т. Е. INTO находится вне выполняемого оператора.

...