0

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

    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 回答