Oracle - 有条件地执行查询

时间:2013-10-31 10:25:52

标签: oracle plsql

我正在开发环境中执行查询,如果它是针对实时环境运行的,那将是灾难性的。因此,我想确保此查询只能针对特定数据库执行。我的Oracle技能不是太热,所以我想知道是否有人可以提供帮助?这是一些伪代码,它解释了我正在尝试做什么:

    select instance_name from v$instance;

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

有人知道该怎么做吗? 感谢您提前提供任何帮助!

2 个答案:

答案 0 :(得分:2)

最好的方法就是避免让查询接近生产。

无论如何,就像你可以做的运动一样:

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

您可以在SQLFiddle上查看此代码并进行测试。我不得不在SQLFiddle上创建一个v $实例来模拟该系统视图。

答案 1 :(得分: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;