Oracle где с переменной - PullRequest
       1

Oracle где с переменной

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

У меня проблема с моим кодом plsql.Это просто часть всей моей работы.

declare 
id number(2):=1; (here is function which returns any value)
check VARCHAR2(100);
begin
select COUNT(*) into check from T_SDSN_LOG Where ANY_ID=id AND CHECK LIKE 
'NAME';
dbms_output.put_line(check);
end; 

В этом случае мой выбор возвращает 0, хотя это должно быть 2. Если я изменяю деталь
Где ANY_ID = id на
Где ANY_ID = 2
, это работает отлично.Любые советы?Мне нужно, чтобы идентификатор был переменной как возвращаемое значение из функции.

1 Ответ

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

При этом используется локально определенная функция, поэтому она недоступна в SQL, но на нее можно ссылаться в PL / SQL.

DECLARE
   lnum_id      NUMBER := return_id;
   lnum_check   VARCHAR2(100);

   FUNCTION return_id
      RETURN NUMBER
   IS
   BEGIN
      RETURN 123456;
   END;
BEGIN
   lnum_id   := return_id;

   SELECT COUNT(*)
   INTO   lnum_check
   FROM   my_table
   WHERE  table_id = lnum_id;

   DBMS_OUTPUT.put_line(lnum_check);
END;

Вы, вероятно, захотите эту функцию в пакете, и в этом случае выможет объявить функцию в заголовке пакета, написать код функции в теле, а затем сослаться на нее в самом SQL.Поэтому, если я объявляю функцию (FNC_RETURN_ID) в пакете с именем PKG_DATA_CHECKS, которая возвращает NUMBER, я могу сделать следующее:

DECLARE
   lnum_id      NUMBER;
   lnum_check   VARCHAR2(100);

BEGIN

   SELECT COUNT(*)
   INTO   lnum_check
   FROM   my_table
   WHERE  table_id = (SELECT pkg_data_checks.fnc_return_id FROM dual);

   DBMS_OUTPUT.put_line(lnum_check);
END;    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...