を返します。Oracleのテーブルから最大のIDを選択する私は、クエリを持って、null値に
SELECT MAX(prod_id) FROM products;
レコードがある場合には最大値を返します。しかし、テーブルを切り捨てて同じクエリを実行すると、max
というIDを取得できません。
を返します。Oracleのテーブルから最大のIDを選択する私は、クエリを持って、null値に
SELECT MAX(prod_id) FROM products;
レコードがある場合には最大値を返します。しかし、テーブルを切り捨てて同じクエリを実行すると、max
というIDを取得できません。
テーブルを切り捨てると、テーブルに行が残っていません。定義上、Max()は空のテーブルに対して実行するとNULLを返します....またはここで何かを逃しましたか?
私は考えていました...オラクルでは、prod_idがシーケンスで定義されている場合、 SELECT prod_id.currval FROM DUAL は、使用された最後の番号を取得します。定義された。 –
はい、truncatingテーブルでは、すべてのデータを削除しました。commit
は不要です。したがって、テーブルにはデータがなく、何もないのはmax
です。あなたは、テーブルの列を照会し、MAX関数はnullを返すことが疑われる場合、あなたはケースのヌルに0を返すことができますしたい場合には
が
SELECT NVL(MAX(P.PROD_ID), 0) AS MAX_VAL
FROM PRODUCTS P
に遭遇されていない値なら、これは、少なくとも0を返します。
これは私のために働く、ありがとう –
Gerald P. Wrightが答えにコメントしたように、IDがシーケンスによって生成された場合、その値を見つけるために使用することができます。 CURRVALは唯一あなたがCURRVALと値をフェッチセッションで動作するため、 しかし
SELECT prod_id_seq.currval FROM DUAL
は、動作しません。
ので、
SELECT prod_id_seq.nextval FROM DUAL
はあなたのための回避策ことができますが、(あなたはこれを数回IDを取得する場合は、インクリメント値を取得します)本当に、本当にBAD解決策になります。
また場合は、シーケンスのキャッシュに依存します。 – Ben
テーブル内のすべてのデータを削除するとテーブル – user367134
を切り捨てると最大IDを得る方法はあります。**テーブルからデータを取得する方法は絶対にありません**。そう、いいえ。以下の両方の回答を参照してください。私は 'truncate'文書へのリンクを私の答えに入れていますので、あなたのテーブルに' truncate'が何をするのかについてより多くの情報が必要な場合は、それを読むことができます。 – Ben