0

開発環境でクエリを実行していますが、ライブ環境に対して実行すると壊滅的になります。このため、このクエリが特定のデータベースに対してのみ実行できるようにしたいと考えています。私のオラクルのスキルはあまり高くないので、誰か助けてくれる人はいないかと思っていました。ここに私がやろうとしていることを説明するいくつかの疑似コードがあります:

    select instance_name from v$instance;

    if instance_name = 'this_environment' 
    then 
        update tableA
        set column1 = 'ABC'
    else
    *break out of query*

これを行う方法を知っている人はいますか?事前に助けてくれてありがとう!

4

2 に答える 2

2

それを行う最善の方法は、そのクエリを本番環境に近づけないようにすることです。

とにかく、あなたができる運動と同じように:

update tableA
   set column1 = 3
 where 'this_environment' in (select instance_name 
                                from v$instance);

このコードを確認し、ここでSQLFiddleでテストを行うことができます。そのシステム ビューをシミュレートするには、SQLFiddle で av$instance を作成する必要がありました。

于 2013-10-31T10:45:24.140 に答える
0

このようなもの:

DECLARE
    CURSOR C1
    IS
        SELECT
              CASE
                  WHEN INSTANCE_NAME = 'ENV_NAME'
                  THEN
                      'Y'
                  ELSE
                      'N'
              END
                  AS FLAG,        -- You can have diff values as per env
              CASE
                  WHEN INSTANCE_NAME = 'ENV_NAME'
                  THEN
                      'YOUR_QUERY'
                  WHEN INSTANCE_NAME = 'ELSE'
                  THEN
                      NULL
              END
                  AS QUERY       -- You can have diff queries as per env
        FROM
              V$INSTANCE;

    MY_FLAG VARCHAR2 ( 1 );
    MY_QUERY VARCHAR2 ( 2000 );
BEGIN
    OPEN C1;

    FETCH C1
    INTO
          MY_FLAG, MY_QUERY;

    CLOSE C1;

    IF FLAG = 'Y'
    THEN
        EXECUTE IMMEDIATE 'my_query';
    END IF;
END;
于 2013-10-31T10:45:35.643 に答える