ホームページ >データベース >Oracle >Oracle ストアド プロシージャとネストの場合の詳細な例

Oracle ストアド プロシージャとネストの場合の詳細な例

PHPz
PHPzオリジナル
2023-04-18 09:06:562469ブラウズ

Oracle ストアド プロシージャは、データベースに保存されるプリコンパイルされたプログラムであり、複数のユーザーが呼び出したり、複数のアプリケーション間で共有したりできます。 Oracle ストアド プロシージャでは、if ステートメントは頻繁に使用される条件制御ステートメントです。条件が true の場合は一部の操作を実行し、条件が false の場合は他の操作を実行できます。if ステートメントはネストすることもできます。これにはさまざまな方法があります。ネストされた if ステートメントを記述し、実際の状況に応じてさまざまな方法を選択できます。

if-else ステートメントは最も一般的なネストされた if ステートメントであり、その基本的な構文は次のとおりです:

if (condition1)
    statement1;
else if (condition2)
    statement2;
else if (condition3)
    statement3;
else
    statement4;

このうち、条件 1、条件 2、および条件 3 は if 条件であり、ステートメント 1、ステートメント 2 、statement3、statement4 はそれぞれ、さまざまな条件が満たされた場合に実行する必要があるアクションを表します。

たとえば、次のコードを通じてストアド プロシージャを実装できます。これは、従業員の給与を見つけるために使用されます。

CREATE OR REPLACE PROCEDURE get_salary (
    p_empno      IN NUMBER,
    p_salary OUT NUMBER
)
AS
BEGIN
    IF p_empno < 1000 THEN
        p_salary := 1000;
    ELSE 
        IF p_empno < 2000 THEN
            p_salary := 2000;
        ELSE
            p_salary := 3000;
        END IF;
    END IF;
END;

上記のストアド プロシージャでは、p_empno が 1000 未満の場合、 、p_salary には値 1000 が割り当てられ、p_empno が 1000 ~ 2000 の場合、p_salary には値 2000 が割り当てられ、p_empno が 2000 以上の場合、p_salary には値 3000 が割り当てられます。

ネストされた if-else ステートメントに加えて、ネストされた if ステートメントを使用して、より複雑なプログラミング ロジックを実装することもできます。たとえば、次の例は、if ステートメントを使用して食品の注文ステータスを処理する方法を示しています。

CREATE OR REPLACE PROCEDURE update_order_status (
    p_order_no IN NUMBER,
    p_status   IN VARCHAR2
)
AS
    v_order_status VARCHAR2(10);
BEGIN
    SELECT order_status INTO v_order_status
    FROM orders
    WHERE order_no = p_order_no;

    IF v_order_status = 'NEW' THEN
        IF p_status = 'APPROVED' THEN
            UPDATE orders SET order_status = 'APPROVED' WHERE order_no = p_order_no;
        ELSE
            UPDATE orders SET order_status = 'REJECTED' WHERE order_no = p_order_no;
        END IF;
    ELSIF v_order_status = 'APPROVED' THEN
        IF p_status = 'SHIPPED' THEN
            UPDATE orders SET order_status = 'SHIPPED' WHERE order_no = p_order_no;
        ELSE
            UPDATE orders SET order_status = 'CANCELED' WHERE order_no = p_order_no;
        END IF;
    ELSE
        RAISE_APPLICATION_ERROR(-20001,'The order is already shipped, cannot be updated.');
    END IF;
END;

上記のストアド プロシージャでは、ネストされた if ステートメントを使用して、現在の注文ステータスに基づいて更新を決定します。および更新する必要があるステータス。注文ステータスが「新規」の場合、注文ステータスを「承認」に更新する必要がある場合は、UPDATE 注文を実行します SET order_status = 'APPROVED' WHERE order_no = p_order_no; それ以外の場合は、注文ステータスを「拒否」に更新します。ステータスが「承認」の場合、注文ステータスを「発送済み」に更新する必要がある場合は、UPDATE 注文を実行します SET order_status = 'SHIPPED' WHERE order_no = p_order_no; それ以外の場合は、注文ステータスを 'CANCELED' に更新します; 最後に、注文ステータスがが 'SHIPPED' の場合、注文ステータスをこれ以上更新することはできません。それ以外の場合は、アプリケーション エラーがスローされます。

つまり、Oracle ストアド プロシージャの if ステートメントは非常に柔軟であり、実際の状況に応じてネストして使用し、さまざまな複雑なプログラミング ロジックを実装できます。 if ステートメントを使用する場合は、条件と操作を明確に定義し、コードが複雑になりすぎて理解しにくくなるのを防ぐために、ネストが深すぎないようにする必要があります。

以上がOracle ストアド プロシージャとネストの場合の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。