Как создать функцию PL / SQL в пакете - PullRequest
0 голосов
/ 26 октября 2018

Как создать PL/SQL функцию get_amount, которая возвращает acc_amount для acc_id, и функцию get_date, которая возвращает acc_date для acc_id.

Здесь у вас есть пакет и тело пакета, как я выполняю последние две функции.

Это я работаю как упражнение.

Я думаю, что мой другой код в порядке.

Я новичок в Oracle и pl / sql, возможно, мой вопрос глупый

Извините, если я плохо объяснил, мой английский не очень хорош.

Спасибовсе за ответ!

CREATE OR REPLACE PACKAGE account_api AS

PROCEDURE add_new_account
    (
      p_acc_id     accounts.acc_id%type
    , p_acc_name   accounts.acc_name%type
    , p_acc_amount accounts.acc_amount%type
    , p_acc_date   accounts.acc_date%type
);

PROCEDURE upd_account   
    (
      p_acc_name   accounts.acc_name%type
    , p_acc_amount accounts.acc_amount%type
    , p_acc_date   accounts.acc_date%type
);

PROCEDURE del_accounts
    (
      p_acc_id     accounts.acc_id%type
);

FUNCTION get_amount 
    (p_acc_id      accounts.acc_id%type)
    RETURN number;

FUNCTION get_date 
    (p_acc_date    accounts.acc_date%type)
    RETURN date;  

end account_api;
/

CREATE OR REPLACE PACKAGE BODY account_api AS

PROCEDURE add_new_account
    (
      p_acc_id     accounts.acc_id%type
    , p_acc_name   accounts.acc_name%type
    , p_acc_amount accounts.acc_amount%type
    , p_acc_date   accounts.acc_date%type
)
IS
BEGIN
    INSERT INTO account (acc_id, acc_name, acc_amount, acc_date)
    VALUES (acc_seq.nextval, p_acc_id, p_acc_name, p_acc_amount, p_acc_date)
END;

PROCEDURE upd_account
    (
      p_acc_name   accounts.acc_name%type
    , p_acc_amount accounts.acc_name%type
    , p_acc_date   accounts.acc_name%type
)
IS
BEGIN
    UPDATE accounts
        SET acc_naziv  = p_acc_naziv
          , acc_amount = p_acc_amount
          , acc_date   = p_acc_date
    WHERE ---------------------------------
COMMIT;
END;

PROCEDURE del_accounts
    (
      p_acc_id     accounts.acc_id%type
)

DELETE FROM accounts WHERE acc_id = p_acc_id;
COMMIT;


FUNCTION get_amount
    (
      p_acc_id    accounts.acc_id%type
)



FUNCTION get_date
    (
       p_acc_id    accounts.acc_id%type
)

Ответы [ 2 ]

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

Если вы хотите вернуть cursor, попробуйте этот.

function get_amount(p_acc_id in number) return t_cursor is
    v_cursor t_cursor
Begin
open v_cursor for 
    select * from  account 
    where acc_id =p_acc_id; 
    return v_cursor;
End get_amount;

Но вы должны определить type t_cursor IS REF Cursor; в заголовке вашего пакета.

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

Вы ищете что-то подобное?

FUNCTION get_amount(p_acc_id accounts.acc_id%type) return Number is
 res number;
begin 
 select acc_amount into res 
 from  account where acc_id =p_acc_id; 
 return res;
end;

Вы выбираете значение в переменную и затем возвращаете эту переменную.

Также имейте в виду, что приведенный выше код может вызвать исключение, если данные не найдены (указаны неправильные данные p_acc_id)

Я оставляю вам вторую реализацию.

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