set serveroutput on;
Declare
cursor emp_cursor is select orderline.orderid, sum(product.productstandardprice * orderline.orderedquantity) AS price from orderline, Product WHERE orderline.Productid = Product.Productid group by orderline.orderid;
emp_row emp_cursor%rowtype;
Begin
open emp_cursor;
if (price < 2,000)
then price := 2,000 * 0.15:
else if (price >= 2,000)
then price := 2,000 * 0.20;
loop
fetch emp_cursor into emp_row;
exit when emp_cursor%notfound;
dbms_output.put_line(emp_row.orderid || ' ' || emp_row.price);
end loop;
close emp_cursor;
End;
質問する
2590 次
3 に答える
1
- 0.15 の後にコロンがあります。それはセミコロンでなければなりません。
- 数値リテラルにはコンマを埋め込んではなりません。
- ステートメント
IF
は、カーソルから何かをフェッチする前に来ます。おそらく、そのステートメントをステートメントの後のループ内に入れたいEXIT
ですか? - あなたのステートメントは、存在しない
IF
変数を参照しています。price
おそらくあなたは参照したいemp_row.price
ですか? IF
ステートメントの構文は次のとおりですIF ... THEN ... ELSIF ... END IF
。が欠落しており、を 1 つEND IF
に結合するか、2 つの別個のステートメントと 2 つの別個のステートメントを使用する必要があります。else if
elsif
IF
END IF
表示されていない追加の構文エラーがある可能性があります。テーブルを作成するための DDL、データを入力するための DML、および期待される結果を投稿することは常に役に立ちます。これにより、システムでテストを行うことができ、すべてのエラーをキャッチできる可能性が高くなります。
于 2013-11-15T03:29:07.237 に答える
0
お役に立てれば...
Declare
cursor emp_cursor is select orderline.orderid, sum(product.productstandardprice * orderline.orderedquantity) AS price from orderline, Product WHERE orderline.Productid = Product.Productid group by orderline.orderid;
emp_row emp_cursor%rowtype;
Begin
open emp_cursor;
loop
fetch emp_cursor into emp_row;
exit when emp_cursor%notfound;
if emp_row.price < 2000 then
emp_row.price := 2000 * 0.15;
elsif emp_row.price >= 2000 then
emp_row.price := 2000 * 0.20;
end if;
dbms_output.put_line(emp_row.orderid || ' ' || emp_row.price);
end loop;
close emp_cursor;
End;
于 2013-11-20T06:22:14.940 に答える
0
If-else ステートメントは次で終了しますEND IF;
それを入れて実行してみてください。
于 2013-11-15T06:01:44.940 に答える