2017-03-13 15 views
1

カスタムplsqlのヘルプを使用して対話型グリッドを使用してデータをテーブルに保存しようとしています。データを挿入する際に「ORA-01403-no data found」というエラーが発生しましたが、その理由がわかりません。Ajaxコールでサーバー・エラーが戻されましたORA-01403:APEX Interactive Gridのデータが見つかりません

これは私が実行する私のplsqlのカスタムプロセスです。あなたの助けに感謝。

DECLARE 

em_id NUMBER; 

BEGIN 

    CASE :apex$row_status 

     WHEN 'C' 
     THEN 
     SELECT NVL (MAX (emergency_id), 0) + 1 
      INTO em_id 
      FROM emp_emergency_contact; 

     INSERT INTO emp_emergency_contact 
        (emergency_id, emp_id, emergency_name, emergency_relation 
        ) 
       VALUES (em_id, :emp_id, :emergency_name, :emergency_relation 
        ); 
     WHEN 'U' 
     THEN 
     UPDATE emp_emergency_contact 
      SET emergency_name = :emergency_name, 
       emergency_relation = :emergency_relation 
      WHERE emergency_id = :emergency_id; 
     WHEN 'D' 
     THEN 
     DELETE  emp_emergency_contact 
       WHERE emergency_id = :emergency_id; 
    END CASE; 
END; 

答えて

2

これまでのところ、AJAXコールを介してAPEX 5.1 Interactive Gridのサブミットされた行を処理するためのカスタムPL/SQLロジックの使用方法に関する文書化された方法は見つかりませんでした。

リターンが特定のjson形式であると予想されるため、データが見つかりませんでした。

あなたが提供した例はあまりにも複雑ではなく、AJAXのアプローチである標準の「Interactive Grid - 自動行処理(DML)」プロセスを使用して行うことができます。 AJAXコールが重要でない場合は、カスタム・ロジックを使用して独自のPL/SQLプロセスを作成できます。 「サンプルインタラクティブグリッド」パッケージアプリケーションでその例が示されている場合は、このアプリケーションの詳細>カスタムサーバー処理ページを参照してください。

私はScottに同意します.IDにはシーケンスまたはID列を使用する必要があります。

2

わかりません。 'select into'はno_data_found例外を発生させることができますが、あなたはそうしてはいけません。

つまり、コードのどこにでもmax(id)+1を置いてはいけません。これはバグです。代わりにシーケンスまたはID列を使用してください。

-1

挿入後にRETURNING INTO句を追加します。 IGは挿入された行を照会するために主キーが返されることを期待しています。

0

私が最初に行うことは、「保存」の一部ではないグリッドSQLの列を見てみることです。データの結合のみからのものです。 私はちょうどそれをもう一度持っていて、それは "Number"の列型として持っていた見出しのソート列でした。私はそれを表示のみに変更し、 "保存"が今すぐ動作します。 しかし、私はすでに列の "Source"を "Query Only"に設定しましたが、これも必要です。

Ajaxエラー・メッセージは、少なくともエラーの原因となった列名を提供していません。

これは誰かに役立つことを願っています。 BillC

関連する問題