PL / SQL过程接受item_num并报告其描述,价格和on_hand数量不起作用

时间:2018-04-26 19:23:58

标签: sql oracle

这是我的数据库管理类中的家庭作业。我们可以选择在校园计算机上使用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 :(得分:0)

问题是由于使用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

答案 1 :(得分:0)

如果你注意你输入的内容,它会起作用;你没有提供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>

你的错误?

  • 它不是DESCRIPTON而是描述
  • 在DBMS_OUTPUT.PUT_LINE调用结束时缺少分号
  • 多余的括号

<强> [编辑]

试试这个:

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>