1

私はSQLを学び、Oracle 11を使用しています。犯罪者データベースを使用して、未払いの料金を支払っている犯罪者を取得しようとしています。私の質問は次のとおりです

select first, last, charge_id, (fine_amount + court_fee) as "Total Amount Owed", NVL(amount_paid, null), (fine_amount + court_fee - amount_paid) as "Amount Owed", pay_due_date 
from crime_charges cc, criminals c, crimes
where crimes.crime_id = cc.crime_id and c.criminal_id = crimes.criminal_id and (NVL(fine_amount, 0) + NVL(court_fee, 0)) – NVL(amount_paid, 0 ) > 0;

データベースには、amount_paid、fine_amount、court_feeのnull値があります。何も借りていない犯罪者を除外しようとしています。つまり、(fine_amount + court_fee)– amount_paid> 0

ORA-00920:無効な関係演算子00920というエラーが表示され続けます。00000-「無効な関係演算子」*原因:
*アクション:行:43列:122でエラーが発生しました

where句でNVLを動作させることができませんでした。NVLを使用したwhere句の例を見てきましたが、クエリとどのように異なるのかわかりません。

例:

SELECT fname, lname, manager_emp_id

FROM employee

WHERE NVL(manager_emp_id, -999) != 7698;
4

2 に答える 2

1

まず、すべてのnullが多くのスペースを占有しているため、データベースを作成するときにNULLアプローチを使用しないようにする必要があると思います。ほとんどの場合、データベースにNULLがあるのは悪い実装です。

NVL(amount_paid、null)は次のように述べています。amount_paidが「null」の場合は「null」に設定します。

私自身はデータベースにまったく慣れていませんが、それが問題になる可能性があります。代わりにNVL(amount_paid、0)を設定してみてください。

それ以外の場合、NVLの使用法は正しいです。

于 2013-03-14T20:11:53.817 に答える
1
于 2013-03-14T20:31:11.800 に答える