23.07.2011 11:59
OlegON
 
Некоторое время назад Супермаг включал себя большое количество безобразных подсказок. Трудно догадаться о причинах их появления, но во избежание неприятностей, связанных с этими подсказками, я на Oracle 10g ставил следующий триггер (заодно включая распараллеливание запросов):
Код:
CREATE OR REPLACE TRIGGER "SYS"."SMUSER_NOHINT" AFTER LOGON ON DATABASE WHEN (supermag.ok_is_smuser(SYS_CONTEXT ('USERENV', 'SESSION_USER'))=1) BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION set "_optimizer_ignore_hints"=true';
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL QUERY';
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DDL';
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';
END smuser_nohint;
соответственно, были два варианта используемой функции:
Код:
CREATE OR REPLACE FUNCTION "SUPERMAG"."OK_IS_SMUSER" (user_n IN VARCHAR2)
RETURN number IS
x number(3);
BEGIN
select max(sign(id)) into x from supermag.smstaff where serverlogin=user_n;
if x>0 then
RETURN 1;
ELSE
RETURN 0;
END IF;
END ok_is_smuser;

CREATE OR REPLACE FUNCTION "SUPERMAG"."OK_IS_SMUSER" (user_n IN VARCHAR2)
RETURN number IS
x number(3);
BEGIN
if user_n in ('SYS','SYSTEM') then
RETURN 1;
ELSE
RETURN 0;
END IF;
END ok_is_smuser;
Часовой пояс GMT +3, время: 19:58.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.