1

動的アクション用に次の PL/SQL 関数本体を作成しようとしています

動的アクションの目的は、入力パラメーターに基づいてテキスト領域の値を設定することです。私がやろうとしている方法は、さまざまなオプションの変数に値を設定することです

declare

P_NOTE varchar(100);  -- derive value
P_WEBSERVER varchar(100);  -- derive name

begin

-- for getting the P_NOTE value
select distinct note into P_NOTE  from port_mapping where PLATFORM = :P3_PLATFORM and VERSION = :P3_VERSION;

-- for getting web server value
select CONCAT(P_NOTE,CONCAT('https-',:P3_CLIENT)) into P_WEBSERVER from dual order by 1;

if (:P3_PLATFORM = 'Apache') then
    return P_WEBSERVER;
end if;

end;

しかし、私はエラーが発生しています

ORA-06550: 行 15、列 5: PLS-00372: プロシージャでは、RETURN ステートメントに式を含めることはできません ORA-06550: 行 15、列 5: PL/SQL: ステートメントは無視されました

  1. 宣言する
  2. P_NOTE varchar(100);
  3. P_WEBSERVER varchar(100);

何が欠けているのかわかりません。

4

2 に答える 2

3

(apexバージョンを投稿していないため、この説明はバージョン4.2を扱います)


これが動的アクションであり、投稿したコードが「PL/SQL コードの実行」タイプの真のアクションである場合は、使用できませんRETURN。plsql ブロッ​​クは関数本体ではありません (Kemp さん、閉じてください!)。
セッション状態からページ アイテムに値を返したい場合は、true アクションの "Page Items to Return" アイテムを使用する必要があります。 動的アクションでplsqlコードを実行 これにより、定義されたページ アイテムのセッション ステートがページ上のアイテムの値に設定されます。これは、変数を使用して何かをページに返すことはできず、実際のページ項目を使用する必要があることを意味します (結局のところ、これらはバインド変数です)。
さらに明確にするために、次のようには書きません。

return P_WEBSERVER;

しかし、たとえば のようなページ アイテムを使用するP3_WEBSERVER必要があり、もちろん存在しない場合は作成する必要があります。

:P3_WEBSERVER := p_webserver;

もちろん、コードサンプルで行ったように短絡できないため、正しい値がそこにあることを確認する必要があります(p_webserver通常、プラットフォームがそうでない場合でも値を保持します'Apache')。

if (:P3_PLATFORM = 'Apache') then
   :P3_WEBSERVER := P_WEBSERVER;
else
   :P3_WEBSERVER := NULL;
end if;
于 2013-08-22T07:30:04.157 に答える