Как использовать объявленную переменную в запросе - PullRequest
0 голосов
/ 24 октября 2018

Я хочу получить количество записей в определенном разделе.
Возвращенное значение будет использовано позже в потоке.

DECLARE  
  pt VARCHAR2(20);
  countr NUMBER;
BEGIN
  pt:='61';
   DBMS_OUTPUT.PUT_LINE(pt);

 SELECT COUNT(*) INTO countr FROM T1 PARTITION ( pt) ;

END;

Но, получив ошибку, он не заменяет 'pt' наназначенное значение.

1 Ответ

0 голосов
/ 24 октября 2018

Нельзя использовать переменные для указания имен объектов (таблиц, столбцов, разделов и т. Д.) В статическом SQL.

Вам необходимо использовать динамический SQL, например, с именем раздела без кавычек:

DECLARE  
  pt all_tab_partitions.partition_name%TYPE;
  countr NUMBER;
BEGIN
  pt:='p61';
  DBMS_OUTPUT.PUT_LINE(pt);

  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM T1 PARTITION (' || pt || ')'
  INTO countr ;
END;
/

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

DECLARE  
  pt all_tab_partitions.partition_name%TYPE;
  countr NUMBER;
BEGIN
  pt:='61';
  DBMS_OUTPUT.PUT_LINE(pt);

  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM T1 PARTITION ("' || pt || '")'
  INTO countr ;
END;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...