1
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;
4

3 に答える 3

1
  1. 0.15 の後にコロンがあります。それはセミコロンでなければなりません。
  2. 数値リテラルにはコンマを埋め込んではなりません。
  3. ステートメントIFは、カーソルから何かをフェッチする前に来ます。おそらく、そのステートメントをステートメントの後のループ内に入れたいEXITですか?
  4. あなたのステートメントは、存在しないIF変数を参照しています。priceおそらくあなたは参照したいemp_row.priceですか?
  5. IFステートメントの構文は次のとおりですIF ... THEN ... ELSIF ... END IF。が欠落しており、を 1 つEND IFに結合するか、2 つの別個のステートメントと 2 つの別個のステートメントを使用する必要があります。else ifelsifIFEND 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 に答える