我正在开发环境中执行查询,如果它是针对实时环境运行的,那将是灾难性的。因此,我想确保此查询只能针对特定数据库执行。我的Oracle技能不是太热,所以我想知道是否有人可以提供帮助?这是一些伪代码,它解释了我正在尝试做什么:
select instance_name from v$instance;
if instance_name = 'this_environment'
then
update tableA
set column1 = 'ABC'
else
*break out of query*
有人知道该怎么做吗? 感谢您提前提供任何帮助!
答案 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;