igor (ico) wrote,
igor
ico

ораклоидное

DECLARE
	cnt	NUMBER;
	index_unusable	EXCEPTION;
	PRAGMA EXCEPTION_INIT(index_unusable, -< 1502 >);
BEGIN
	BEGIN
		SELECT	NULL
		INTO	cnt
		FROM	dba_indexes
		WHERE	owner = SYS_CONTEXT('userenv', 'current_schema')
			AND index_name = 'UX_RATE_CURRENCY_DATE';
	EXCEPTION
	WHEN no_data_found THEN
		RAISE index_unusable;
	END;
	OPEN	:cur
	FOR	SELECT	(
			SELECT	/*+ INDEX_DESC (r ux_rate_currency_date) */
				rte_rate
			FROM	t_rate
			WHERE	rte_currency = acm_currency
				AND rte_date <= acm_date
				AND rownum = 1
			) * acm_sum
		FROM 	t_accmove;
EXCEPTION
WHEN index_unusable THEN
	OPEN	:cur
	FOR	SELECT	(
			SELECT	/*+ FULL(r) */
				MAX(rte_rate) KEEP (DENSE_RANK LAST ORDER BY rte_date)
			FROM	t_rate r
			WHERE	rte_currency = acm_currency
				AND rte_date <= acm_date
			) * acm_sum
		FROM	t_accmove;
	DBMS_OUTPUT.put_line('Уникальный индекс окривел.');
	DBMS_OUTPUT.put_line('Это могло произойти по причине того, что какой-то негодяй двигал partition, по которым был построен индекс.');
	DBMS_OUTPUT.put_line('Бейте в колокола, трубите в трубы, громко орите, юродствуйте, трясите исподним, грозите всеми земными карами!');
	DBMS_OUTPUT.put_line('...или напишите в спортлото...');
END;
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments