Процедура PL / SQL для принятия item_num и сообщения о его описании, цене и количестве on_hand не работает - PullRequest
0 голосов
/ 26 апреля 2018

Это домашнее задание в моем классе управления базами данных. Нам дали возможность использовать Oracle SQL Developer на компьютерах кампуса или использовать SSH Secure Shell (я использую позже). Я должен написать процедуру, которая принимает item_num и сообщает его описание, цену и количество on_hand. (Кстати: все они взяты из таблицы с именем «item».) Мой профессор сказал, что несколько команд (перечисленных выше процедуры) должны выполнить процедуру. Мой код:

serveroutput on; 
accept item_num prompt 'Enter a item_num: '; 
exec reports_item_info();

create or replace procedure reports_item_info (i_item_num in
item.item_num%type) as
i_description item.descripton%type;
i_std_price item.std_price%type;
i_on_hand item.on_hand%type;

begin
select description,std_price,on_hand
into i_description,i_std_price,i_on_hand
from item
where item_num = i_item_num;

dbms_output.put_line(rtrim(i_description))||' '||
    (rtrim(i_std_price))||' '||(rtrim(i_on_hand))

end;
/

Я знаю, что что-то не так, потому что это не работает. Как я мог изменить его, чтобы он работал?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Если вы обратите внимание на то, что вы печатаете, это работает; Вы не предоставили CREATE TABLE, поэтому я создал его сам.

SQL> create table item (item_num    number,
  2                     description varchar2(20),
  3                     std_price   number,
  4                     on_hand     number);

Table created.

SQL>
SQL> create or replace procedure reports_item_info
  2    (i_item_num in item.item_num%type)
  3  as
  4    i_description item.description%type;
  5    i_std_price   item.std_price%type;
  6    i_on_hand     item.on_hand%type;
  7  begin
  8    select description, std_price, on_hand
  9      into i_description, i_std_price, i_on_hand
 10      from item
 11      where item_num = i_item_num;
 12
 13  dbms_output.put_line(rtrim(i_description) ||' '||
 14                       rtrim(i_std_price)   ||' '||
 15                       rtrim(i_on_hand)
 16                      );
 17  end;
 18  /

Procedure created.

SQL>

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

SQL> insert into item values (1, 'test', 100, 10);

1 row created.

SQL> exec reports_item_info(1);
test 100 10

PL/SQL procedure successfully completed.

SQL>

Ваши ошибки?

  • это не ОПИСАНИЕ, а ОПИСАНИЕ
  • отсутствует точка с запятой в конце вызова DBMS_OUTPUT.PUT_LINE
  • лишние скобки

[EDIT]

Попробуйте с этим:

SQL> declare
  2    item_num number := &enter_item_num_value;
  3  begin
  4    reports_item_info(item_num);
  5  end;
  6  /
Enter value for enter_item_num_value: 1
old   2:   item_num number := &enter_item_num_value;
new   2:   item_num number := 1;
test 100 10

PL/SQL procedure successfully completed.

SQL>

или

SQL> accept itnum prompt 'Enter value : ';
Enter value : 1
SQL> exec reports_item_info(&itnum);
test 100 10

PL/SQL procedure successfully completed.

SQL>
0 голосов
/ 26 апреля 2018

Проблема из-за использования dbms_output.put_line сделать его как

dbms_output.put_line(rtrim(i_description)||' '||rtrim(i_std_price)||' '||rtrim(i_on_hand)); 

, удалив лишние скобки.

Разумеется, ставьте точку с запятой в конце этого утверждения.

И есть проблема в правописании столбца description.

Затем используйте следующее:

 SQL> set serveroutput on;

 SQL> CREATE TABLE item(
                  item_num    varchar2(50),
                  description varchar2(100),
                  std_price  number(10,2),
                  on_hand    varchar2(100)
 );

 SQL> INSERT INTO item VALUES ('AH74, BR23, CD33','abc',15.75,'defgh');

 SQL> COMMIT;

 SQL> create or replace procedure reports_item_info(i_item_num in item.item_num%type) as
    i_description item.description%type;
    i_std_price   item.std_price%type;
    i_on_hand     item.on_hand%type;
  begin
    select description, std_price, on_hand
      into i_description, i_std_price, i_on_hand
      from item
     where item_num = i_item_num;

    dbms_output.put_line(rtrim(i_description) || ' '|| rtrim(i_std_price)||' '||rtrim(i_on_hand));

  end;
  /

  SQL> accept item_num prompt 'Enter a item_num: '; -- enter   AH74, BR23, CD33   when prompts
  SQL> exec reports_item_info('&item_num'); -- use parameter with quotes

  abc 15.75 defgh

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