2017-02-24 13 views
-1

Oracle Apex 4.2でデータベース11gを使用しています。私は、ユーザから受け取った値(l_requested_time)をテーブルの列(music_lookup.valid_time)に格納されている値と比較する必要があります。提供された値がテーブルに含まれている場合、トランザクションは続行する必要があります。指定された値がテーブルにない場合は、トランザクションをキャンセルする必要があります。私はこれをApexに入れる前にSQL Developerでこれを構築しています。 SQL Developerで次のコードを実行すると、エラー・メッセージが表示されます。PLS-00405:このコンテキストではサブクエリは使用できません。私はこの制限を回避する方法を知りません。PL/SQL IN句をテーブルに使用

Declare 
    l_requested_time varchar2(256); 
Begin 
    l_requested_time := '10:00 AM'; 
    If l_requested_time in (select valid_time from music_lookup) 
    Then dbms_output.put_line('The transaction is authorized'); 
    Else dbms_output.put_line('The transaction is NOT authorized'); 
    End if; 
End; 

この問題にアプローチするには、より良い方法がありますか?

ありがとうございます。

答えて

1

いくつかあります。

  1. PL/SQLロジックが構文的に間違っています。あなたは今
Declare 
    l_requested_time varchar2(256); 
    junk varchar2(1); 
Begin 
    l_requested_time := '10:00 AM'; 
    select 'x' into junk from music_lookup where requested_time = l_requested_time; 
    dbms_output.put_line('The transaction is authorized'); 

exception 
    when no_data_found then 
    dbms_output.put_line('The transaction is NOT authorized'); 
End; 

ような何かをする必要があり、エラーが発生します別の条件は、実際にそこにあります。もし私に条件が1つ以上の列があったら? 私はそれだけで時間を照会することが多いと思う。例えばuser_id?

  1. 日付/時刻には、実際にはDATE(またはTIMESTAMP)データ型を使用する必要があります。
+0

こんにちはBobC、ありがとうございます。ほんとうにありがとう。それは素晴らしいアプローチであり、うまく動作します。あなたの他の懸案事項に答えるには:1)Requested_TimeフィールドとUserNameフィールドの組み合わせに基づいてmusic_lookupテーブルにUnique Key制約があるので、クエリは複数の行を返すべきではありません。結合されたキーは、ユーザーがその時刻を含むタイムスタンプを持つレコードを編集する権限を持っていることを示します。 2)l_requested_timeフィールドは、タイムスタンプフィールドから抽出されます。 Apexに移動する前にSQLDeveloperを使用していたので、私はUserNameを含めなかった。再度、感謝します。 – user3138025