Функция, которая принимает входной параметр и возвращает данные, создана с ошибками компиляции

Создайте функцию с именем find_balance, которая принимает invoice_id в качестве входных данных и возвращает balance_status типа varchar.
. Название функции: find_balance Входной параметр: invoice_id в int
Выходная переменная: balance_status с типом данных varchar

Правила оформления:

  1. Если баланс данного идентификатора счета-фактуры равен нулю, отображается статус «Платеж завершен».
  2. Если баланс данного идентификатора счета-фактуры больше нуля, то отображается статус как сумма «еще не оплаченная». Я написал следующий запрос:

CREATE OR REPLACE FUNCTION find_balance (invoice_id IN INTEGER)  
   RETURN VARCHAR2  
IS  
   c_find_balance   NUMBER (5, 2);  
   balance_status  VARCHAR (255);  
BEGIN  
   SELECT find_balance  
     INTO c_find_balance  
     FROM shipment_entity  
    WHERE id = invoice_id;  

   IF c_find_balance == 0  
   THEN  
      balance_status := 'The payment has been Completed';  
   ELSE  
      IF c_find_balance > 0  
      THEN  
         balance_status := find_balance'yet to be paid';  
      END IF;  
   END IF;  

   RETURN (c_find_balance);  
END;  
/  

Прежде всего, вы возвращаете c_find_balance, который является числом. Вы наверняка захотите вернуть balance_status.

Robert Kock 03.12.2018 16:37

Кроме того, в вашем ELSE вы говорите balance_status := find_balance'yet to be paid'. Может ты имел ввиду balance_status := TO_CHAR(c_find_balance) || ' yet to be paid

Robert Kock 03.12.2018 16:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
661
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы довольно близки к решению; Интересно, почему вы сами этого не исправили.

Примерная таблица и данные:

SQL> create table shipment_entity
  2    (id number,
  3     find_balance number
  4    );

Table created.

SQL> insert into shipment_entity values (1, 100);

1 row created.

SQL> insert into shipment_entity values (2, 0);

1 row created.

Функция: я отметил, что вы сделали не так (строки 5, 12, 18, 22):

SQL> CREATE OR REPLACE FUNCTION find_balance (invoice_id IN INTEGER)
  2     RETURN VARCHAR2
  3  IS
  4     c_find_balance   NUMBER (5, 2);
  5     balance_status  VARCHAR2 (255);         --> VARCHAR2, not VARCHAR
  6  BEGIN
  7     SELECT find_balance
  8       INTO c_find_balance
  9       FROM shipment_entity
 10      WHERE id = invoice_id;
 11
 12     IF c_find_balance = 0                   --> =, not ==
 13     THEN
 14        balance_status := 'The payment has been Completed';
 15     ELSE
 16        IF c_find_balance > 0
 17        THEN
 18           balance_status := c_find_balance || ' yet to be paid';  --> missing concatenation; wrong variable name
 19        END IF;
 20     END IF;
 21
 22     RETURN (balance_status);                --> balance_status, not c_find_balance
 23  END;
 24  /

Function created.

Тестирование:

SQL> select find_balance(1) res1,
  2         find_balance(2) res2
  3  from dual;

RES1
--------------------------------------------------------------------------------
RES2
--------------------------------------------------------------------------------
100 yet to be paid
The payment has been Completed


SQL>

Другие вопросы по теме