2012-03-25 14 views
3

別のページに次のコードを入力しましたが、プロシージャ名が無効です。 SQL Developerの同じ作業領域に一緒に入力すると、実行が警告付きで完了したことが示されます。出力は全くないようです。警告付きでPL/SQLの実行が完了しましたか?

ユーザーが入力した1つの値(この場合はono)を使用して、いくつかのテーブルからいくつかの値を取得するのは、大学の課題です。

ここでは、注文番号(ono)を使用して、書籍、数量オーダー、およびカスタム名のタイトルを取得する必要があります。

これは私のコードです:

create or replace procedure proc2 (ono in number 
        , cname out varchar, book out varchar, qty out number) is 
    temp number; 
begin  
    select custid into temp from ordr where orderno = ono; 
    select custname into cname from customer where custid = temp; 
    select isbn,qtystock into temp,qty from order_list where orderno = ono; 
    select title into book from books where isbn = temp; 
end proc2; 

と私のメインの呼び出し機能:

set serveroutput on 
declare 
    cname varchar(7); 
    book varchar(7); 
    ono number; 
    qty number; 
begin 
    ono := &ono; -- I even tried explicitly giving a value didn't work 
    proc2(ono, cname, book, qty); 
    dbms_output.put_line('customer name: '||cname||'book title :'||book||'quantity ordered :'||qty); 
end; 

手順が正常に実行されましたが、私は、main関数に間違いを見つけるように見えることはできません。何が間違っていると思いますか?

私は以下の関数を実行しても正常に実行され、main関数を実行すると警告付きで実行されますが、なぜわかりません!

機能:

create or replace function totfun(ip in number) return number is 
t number(5); 
t1 number(5); 
t2 number(5); 
begin 
select isbn,qtystock into t,t1 from order_list where orderno=ip; 
select price into t2 from books where isbn=t; 
return t1*t2; 
end totfun; 

主な機能:マニュアルから

set serveroutput on; 
declare 
ip number; 
begin 
ip:=&orderno; 
dbms_output.put_line(totfun(ip)); 
end; 
+3

使用 'ショーerrors'。また、複数の 'SELECT'ステートメントを読む必要があります。私が知る限り、テーブルに「JOIN」するだけで、同じ情報を得ることができます。 –

+0

それは私がそれを試してみましょう良い考えです;) – LoveMeow

答えて

1

サブプログラムを終了する前に、すべてのOUT仮 パラメータに値を割り当てます。それ以外の場合、対応する実際のパラメータは になります。正常終了すると、実際の パラメータにPL/SQLによって値が割り当てられます。未処理の例外を終了すると、PL/SQLは に実際のパラメータに値を割り当てません。

出力パラメータに値を割り当てましたか?

proc2を終了する前の出力パラメータは何ですか?

プロシージャproc2の内部でコードをトレースすると便利でしょうか?

警告はありますか? `CREATE ...`後、コンパイル・エラーを参照するには

Warnings: useful to read(link)

関連する問題