7605

Курсори SQL

Лекция

Информатика, кибернетика и программирование

Курсори SQL Курсор дозволяє включити у вибірку тільки деякі з отриманих записів. При правильному використанні курсори підвищують ефективність роботи з наборами записів. Курсори виконуються тільки в транзакційних блоках...

Украинкский

2013-01-26

132 KB

1 чел.

PAGE  2

Курсори SQL

Курсор дозволяє включити у вибірку тільки деякі з отриманих записів. При правильному використанні курсори підвищують ефективність роботи з наборами записів. Курсори виконуються тільки в транзакційних блоках.

        Курсор мовою SQL являє собою вказівник на підсумковий набір даних, виданих командою SELECT. Його використання надає такі переваги:

  •  економія оперативної пам’яті за рахунок зберігання тільки потрібних даних (вибірки). Це особливо вигідно під час використання громіздких таблиць;
  •  зменшення навантаження на зовнішні носії пам’яті при багаторазовому читанні вибірки, включаючи читання одних і тих же даних. Це дозволяє зменшити кількість звертань до зовнішньої пам’яті при багаторазовому використанні одних і тих же даних. Зменшується навантаження й на мережу в багатокористувацьких системах;
  •  збільшення швидкості звертання до даних за рахунок уникнення блокування.

        Оголошення курсора. Курсор може бути оголошений тільки в складі транзакційного блока, який починається з команди BEGIN. В SQL команда оголошення курсора одночасно виконує його відкриття. Комана оголошення має такий вигляд:

        DECLARE курсор [ BINARY ] [ INSENSITIVE ] [ SCROLL ]

        CURSOR FOR запит

        [ FOR { READ ONLY | UPDATE [ OF поле [, ...]]}]

        Тут:

        курсор – ім’я створюваного курсора;

        BINARY означає, що вихідні дані повинні повертатися в двійковому форматі замість стандартного ASCII-коду;

        INSENSITIVE забезпечує незалежність даних, повернених курсором, від інших курсорів або підключень, тобто дані, отримані з використанням курсора, не схильні до змін з боку інших процессів (і інших курсорів);

        SCROLL забезпечує прокрутку даних, тобто дозволяє багаторазове читання записів;

        CURSOR FOR запит – запит, якого підсумковий набір стає доступним через курсор;

        READ ONLY дозволяє використовувати курсор тільки для читання даних. У PostgreSQL цей режим установлений за замовчуванням.

        UPDATE – курсор використовується для редагування таблиць;

        OF поле – список імен полів, що оновлюються курсором.  

        PostgreSQL не вимагає окремого відкриття курсорів, курсори відкриваються автоматично під час оголошення.  

        У поданому нижче прикладі створено транзакцію командою BEGIN і відкрито курсор gazprovid, який буде містити всі записи і всі поля таблиці gazpr.

        BEGIN;

        DECLARE gazprovid CURSOR  FOR SELECT * FROM gazpr;

        Вибірка записів з  курсора проводиться командою FETCH, яка має такий вигляд:

        FETCH [ FORWARD | BACKWARD | RELATIVE ] [ число | ALL | NEXT | PRIOR ]

                { IN | FROM } курсор

        У цьому оголошенні курсорімя курсора, з якого відбувається вибірка записів. Курсор завжди вказує на поточну позицію підсумкового набору, а у вибірці можуть брати участь записи, що знаходяться до або після неї. Напрям вибірки визначається ключовими словами FORWARD і BACKWARD, за замовчуванням використовується пряма вибірка (FORWARD). Слово RELATIVE число означає зміщення на задану кількість записів відносно поточної позиції курсора. У команді замість RELATIVE може використовуватися ключове слово ABSOLUTE – абсолютне позиціонування, тобто переміщення до заданого запису.

        За ключовим словом, що ідентифікує напрям, можна вказувати кількість записів. Допускається вказання конкретного числа записів (у вигляді цілочислової константи) або одного з декількох ключових слів. Ключове слово ALL означає, що команда повертає всі записи, починаючи з поточної позиції курсора, NEXT (використовується за замовчуванням) – наступний запис від поточної позиції – PRIOR запис, який знаходиться перед поточним.

        Ключові слова IN і FROM еквівалентні, з них  команда повинна мати якесь одне.

        Нижче у прикладі вибираються перші чотири записи підсумкового набору, на який посилається курсор gazprovid. Напрямок не вказаний, тому за замовчанням використовується ключове слово FORWARD. Далі команда FETCH з ключовим словом NEXT вибирає п’ятий запис, після чого вона з ключовим словом PRIOR знову повертається до четвертого запису.

        FETCH 4 FROM gazprovid;

        FETCH NEXT FROM gazprovid;

        FETCH PRIOR FROM gazprovid;

 

        Число записів може бути як додатнім, так і відємним. При додатньому значенні відлік ведеться в напрямку, заданому відповідним параметром (якщо параметр не вказаний, за замовчуванням використовується параметр FORWARD).

        При від’ємній кількості записів відлік ведеться в напрямку, протележному заданому. Наприклад, конструкція FORWARD -5 еквівалентна конструкції BACKWARD 5. Якщо кількість запрошених записів перевищує кількість записів у базі, команда FETCH вибирає всі існуючі записи у вказаному напрямку.

        У подальших прикладах виготовляється курсор gazprovid, який повертає дані з таблиці gazpr. Наступна команда вибирає перші два його записи:

        BEGIN;

        DECLARE gazprovid CURSOR FOR SELECT kod_g, naz_g FROM gazpr;

        FETCH FORWARD 2 IN gazprovid;

        У нижченаведеному прикладі конструкція BACKWARD -2 також проводить вибірку двох записів у прямому напрямку:

        FETCH BACKWARD - 2 IN gazprovid;

        А ця команда демонструє вибірку в зворотному напрямку через курсор gazprovid:

        FETCH BACKWARD 3 IN gazprovid;

        FETCH prior IN funccursor; --на 1

        FETCH next IN funccursor; --на 1

        FETCH 2 IN funccursor; -- те ж, що BACKWARD 2

        Переміщення курсора до заданого запису виконується командою MOVE:

        MOVE[FORWARD|BACKWARD|RELATIVE][число|ALL|NEXT|PRIOR]{IN|FROM} курсор

        Як видно з цього оголошення, синтаксис команди MOVE дуже близький до синтаксису команди FETCH. Втім, команда MOVE ніяких записів не повертає і лише переміщає поточну позицію курсора. Зміщення задається цілочисловою константою або ключовими словами ALL (переміщення в заданому напрямку на максимально можливу відстань), NEXT або PRIOR. Нижче у прикладі поточна позиція курсора переміщується на 3 записи вперед.

        Спроба вибірки нуля записів із ключовим словом RELATIVE спричиняє помилку ERROR: FETCH/RELATIVE at current position is not supported. Це пов’язано з тим, що відповідно до стандарту SQL92 команда FETCH RELATIVE FROM курсор повинна забезпечувати повторну вибірку запису в поточній позиції курсора. У деяких версіях PostgreSQL цей синтаксис не підтримується. Без ключового слова RELATIVE число 0 інтерпретується як запит на вибірку всіх записів. Але з ключовим словом RELATIVE PostgreSQL припускає, що ви намагаєтеся використовувати синтаксис SQL92, і замість того, щоб повернути всі записи, виводить повідомлення про помилку. Наведемо приклад переміщення поточної позиції курсора:

        MOVE FORWARD 3 IN gazoprovid;

        Закриття курсора забезпечується командою CLOSE. Курсор також автоматично закривається при виході з транзакційного блоку, в якому він знаходиться, при фіксації транзакції командою COMMIT або при її відкоті командою ROLLBACK.

Команда CLOSE має такий вигляд (курсорім’я курсора, що закривається):

        CLOSE курсор

        У нижченаведеному прикладі курсор gazoprovid закривається і звільняє займану ним пам’ять, внаслідок після чого дані курсора стають недоступними.

 

        CLOSE gazoprovid;

        COMMIT;

        Команда CLOSE закриває відкритий курсор і звільняє всі використовувані ним ресурси. Коли потреба в курсорі відпадає, його слід закривати. Після закриття курсора подальші операції з ним стають неможливими.  

  1.  Повернені курсори (PostgreSQL 8.3, Pl/pgSQL– процедурна мова SQL)

        Функції Pl/pgSQL можуть повертати курсори. Їх доцільно застосувати, якщо маємо порівняно великі команди SQL, тоді команда виклику функції буде коротшою.   

          Ім’я порталу, який використовується для курсора, може бути задане програмістом або генерується автоматично. Для вказання назви порталу слід присвоїти рядок refcur змінній перед його відкриттям. У прикладі нижче показаний один із способів виклику курсора:

CREATE OR REPLACE FUNCTION p_kurs(refcursor, integer) RETURNS refcursor AS

$$

DECLARE

kod ALIAS FOR $2;

BEGIN

OPEN $1 FOR SELECT * FROM gazpr WHERE kod_g > kod;

RETURN $1;

END;

$$

 LANGUAGE plpgsql;

BEGIN;

SELECT p_kurs('funccursor',2);

FETCH ALL IN funccursor; -- решта від поточного

MOVE prior FROM funccursor;  

MOVE first FROM funccursor; --на 1-й запис

MOVE prior FROM funccursor;-- на один запис назад (до переду)


        Можлива автоматична генерація імені курсора та повернення функцією декількох курсорів


        39.7. Курсори (Beta 9.0)


        Замість виконання цілого запиту за одним разом, можна створити курсор, який інкапсулює запит, а потім прочитати його декілька рядків. Цікавою є можливість використання функції, яка забезпечує ефективний спосіб повернення великих наборів рядків з функцій.

        39.7.1. Оголошення курсорної змінної

        Всі доступи до курсора в Pl/pgSQL проходять через курсорні змінні, які мають спеціальний тип даних refcursor. Один із способів створення курсорної змінної є просто її оголошення як змінної типу refcursor. Інший спосіб – оголошення курсора, яке має такий синтаксис:


        ім’я  [[ NO ] SCROLL ] CURSOR [( аргументи ) ] FOR запит;


         (FOR можна замінити на IS для сумісності з Oracle.) Якщо SCROLL вказаний, то курсор буде здатний до прокрутки назад; якщо вказано NO SCROLL, то зворотна вибірка буде відхилена, якщо ні одна специфікація не вказана, то чи вибірка назад буде дозволена залежить від запиту. Аргументи, перелік яких дається через кому, визначають імена, які повинні бути замінені значеннями параметрів запиту. Фактичні значення для заміни цих імен буде уточнено після відкриття курсора. Ось деякі приклади:


        DECLARE 

        curs1 REFCURSOR;

        curs2 CURSOR FOR  SELECT * FROM джерело;

        curs3 CURSOR (ключ INTEGER) IS SELECT *  FROM джерело WHERE поле = ключ;


        
Всі ці три змінні мають тип refcursor, але перша може бути використана з будь-яким запитом, друга має зв’язаний з нею запит і, нарешті, – зв’язаний з нею параметризований запит (ключ може бути замінений цілим значенням параметра при відкритті курсора.) Змінна curs1 називається незвязаною, оскільки вона не привязана ні до якого конкретного запиту.


        39.7.2. Відкриття курсора 


        Перед використанням курсора для отримання рядків його необхідно відкрити. (Це еквівалентно дії команди SQL DECLARE CURSOR.) Pl/pgSQL має три форми відкриття, дві з яких незв’язані з курсорними змінними, а третя використовує зв’язану змінну курсора.      

        Примітка: змінні, пов’язані з курсором, можуть також використовуватися без явного відкриття курсора, через оператор FOR, описаний у розділі 39.7.4.


        
39.7.2.1. Відкритя для запиту (Можливе також відкриття для виконання – EXECUTE)


       
 OPEN unbound_cursorvar [[ NO ] SCROLL ] FOR запит;


        
Змінну курсора буде відкрито і з урахуванням зазначеного запиту виконано. Курсор не може бути відкритим під час оголошення. Він повинен бути оголошений як незв’язана змінна курсора (тобто, як проста змінна refcursor). Запит повинен бути SELECT, чи щось інше, що повертає рядки (наприклад, EXPLAIN). Запит PL/pgSQL ттакий же, як і інші команди SQL: в PL/pgSQL імена змінних замінюються, і план запиту кешується для можливого повторного використання. Варіанти SCROLL і NO SCROLL мають те ж значення, що й для звязаного курсора. Наприклад:

        OPEN curs1 FOR SELECT * FROM foo WHERE key = mykey;


        39.7.2.3. Відкриття з’вязаного курсора


        OPEN bound_cursorvar [(argument_values)];


        Ця форма використовується для відкриття курсора, якого запит був звязаний зі змінною під час оголошення. Курсор не може бути відкритий під час оголошення. Список фактичних параметрів – значення аргументів повинно задаватися тільки тоді, коли курсор був оголошений для прийому аргументів. Ці значення будуть замінені у запиті. План запиту для звязаного курсора завжди вважається кешованим, у цьому випадку немає еквівалента відкриття для EXECUTE. Тут немає SCROLL і NO SCROLL, поведінка курсора за замовчуванням визначена як прокручування. Заміна змінної робиться як у запиті звязаного курсора, є два способи передачі значень у курсор: або з явного аргумента відкриття, чи неявно, посилаючись на змінну PL/pgSQL у запиті (варіант INTO). Однак, тільки змінні, оголошені перед звязаним курсором буде замінено. В будь-якому випадку значення для передачі визначається у момент відкриття. Приклади:


        OPEN curs2;

        OPEN curs3 (42);


        39.7.3. Використання курсорів


        Як тільки курсор відкритий, його даними можна маніпулювати відповідно до зробленого опису. Ці маніпуляції не повинні відбуватися в тій же функції, що відкритий курсор. Можна повернути значення refcursor з функції, і нехай викликає працювати на курсор. (Внутрішньо, refcursor значення просто рядок імя так званого порталу, який містить активний запит для курсора. Це імя може бути передано з усього, віднесеного до інших змінних refcursor, не порушуючи порталу.) Всі портали неявно закриваються наприкінці запиту, тому значення refcursor може використовуватися тільки до кінця операції.


        39.7.3.1. FETCH


       
 FETCH [напрямок {FROM | IN}] курсор INTO  ціль;

 
     
  FETCH витягує наступний рядок з курсора в ціль, яка може бути рядком змінних, записом або розділеним комами списком простих змінних, так же як і в SELECT INTO. Як і в SELECT INTO, спеціальна змінна може бути перевірена на наявність – FOUND. Напрямок може бути будь-яким із варіантів дозволених командою SQL FETCH, крім тих, які можуть видавати більше одного рядка, а саме: NEXT, PRIOR, FIRST, LAST, ABSOLUTE count, RELATIVE count, FORWARD, або BACKWARD. Напрямок NEXT опускається. Приклади:

        FETCH   curs1    INTO   rowvar;

        FETCH   curs2    INTO   foo,   bar,   baz;

        FETCH   LAST   FROM   curs3    INTO   x,  y;

        FETCH   RELATIVE  -2  FROM   curs4   INTO   x;

        39.7.3.2. MOVE 

 

        MOVE [напрямок {FROM | IN}] курсор;

        MOVE переміщує курсор без отримання будь-яких даних. MOVE працює так же, як у команді FETCH, за винятком того, що курсор не повертає рядок. Як і в SELECT INTO та FETCH, відбувається перевірка чи існує рядок, на який потрібно перейти. Напрямок може бути будь-яким із дозволених у команді SQL FETCH, а саме: NEXT, PRIOR, FIRST, LAST, ABSOLUTE count, RELATIVE count, ALL, FORWARD [count | ALL], або BACKWARD [count | ALL]. Напрямок NEXT опускається. Приклади:


        MOVE curs1;

        MOVE LAST FROM curs3;

        MOVE RELATIVE -2 FROM curs4;

        MOVE FORWARD 2 FROM curs4;

        39.7.3.3. UPDATE / DELETE WHERE CURRENT OF


        UPDATE таблиця SET ... WHERE CURRENT OF курсор;

        DELETE FROM таблиця WHERE CURRENT OF курсор;


       Коли курсор знаходиться на рядку таблиці, її рядки можуть бути оновлені або вилучені за допомогою курсора для ідентифікації рядка. Існують обмеження на те, що запит курсора може бути (зокрема, не угруповання), і це найкраще використання курсора для внесення до неї змін. Для отримання додаткової інформації див сторінку DECLARE посилання. Наприклад:


        UPDATE foo SET dataval = myval WHERE CURRENT OF curs1;


        39.7.3.4. Закритя курсора

 
        CLOSE курсор;


        CLOSE закриває портал основного відкритого курсора. Це може бути використано для звільнення ресурсів чи для звільнення курсорної змінної перш, ніж його буде відкрито знову. Наприклад:


        CLOSE curs1;

        Zvit з курсором:

CREATE OR REPLACE FUNCTION zvit(integer)

RETURNS text AS

$$

DECLARE

name_p pidpr.naz_p %TYPE; kilkist oblik.kilk %TYPE; name_g gazpr.naz_g %TYPE;

den INTEGER; mis INTEGER; rik INTEGER; ms CHARACTER(9) ARRAY[12];

slovo TEXT; kod ALIAS FOR $1;

kursor CURSOR FOR   

SELECT pidpr.naz_p,SUM(oblik.kilk) FROM pidpr

INNER JOIN oblik ON pidpr.kod_p = oblik.kod_p

WHERE oblik.kod_g=kod

AND EXTRACT(YEAR FROM CURRENT_DATE)=EXTRACT(YEAR FROM OBLIK.DATA)

GROUP BY pidpr.naz_p

ORDER BY pidpr.naz_p;

BEGIN

den:=EXTRACT(DAY FROM CURRENT_DATE);

mis:=EXTRACT(MONTH FROM CURRENT_DATE);

rik:=EXTRACT(YEAR FROM CURRENT_DATE);

ms[1]:='січня';ms[2]:='лютого';ms[3]:='березня';ms[4]:='квітня';ms[5]:='травня';ms[6]:='червня';

ms[7]:='липня';ms[8]:='серпня';ms[9]:='вересня';ms[10]:='жовтня';ms[11]:='листопада';ms[12]:='грудня';

SELECT INTO name_g naz_g FROM gazpr WHERE kod_g = kod;

slovo:='                                         Звіт'||E'\n';

slovo:=slovo ||'про кількість транспортованого газу по газопроводу '||name_g||E'\n';

slovo:=slovo ||'станом на '||TO_CHAR(den,'99')||' '||ms[mis]||' '|| TO_CHAR(rik,'9999')||E'\n\n';

slovo:=slovo ||'Підприємство                  Кількість'||E'\n';

slovo:=slovo ||'-----------------------------------------------'||E'\n';

OPEN kursor;

LOOP

FETCH kursor INTO name_p, kilkist;

exit when not found;

slovo:=slovo||name_p||'           '||TO_CHAR(kilkist,'99.9')||E'\n';

END LOOP;

CLOSE kursor;

RETURN slovo;

END;

$$

LANGUAGE plpgsql;

select zvit(2);

                                                      Звіт

про кількість транспортованого газу по газопроводу Ямпіль-Ужгород-держкордон

станом на  12 квітня  2011

Підприємство                  Кількість

-----------------------------------------------

Експорттрансгаз             5.0

Прикарпаттрансгаз         2.0

        Таблиця gazpr (газопроводи):

1   Україна                                         1   1400

2   Ямпіль-Ужгород-держкордон     2   1400

3   Острогожськ-Гадяч                     2   1000

4   Єлецьк-Орел                               7   1200

5   Єлецьк-Десна-Кривий Ріг           5   1600

        Таблиця pidpr (підприємства):

1  Харківтрансгаз              Харків        

2  Прикарпаттрансгаз       Івано-Франківськ         

3  Київтрансгаз                  Київ                    

4  Львівтрансгаз                Львів          

5  Експорттрансгаз           Ужгород    

        Таблиця оblik (облік):

2    2    2005-04-12    2

2    2    2011-04-12    2

2    5    2011-02-11    1

3    5    2011-09-10    3

2    5    2011-07-01    4

        Zvit_cykl без курсора:

CREATE OR REPLACE FUNCTION zvit_cykl(integer)

RETURNS text AS

$$

DECLARE

zapysp pidpr %ROWTYPE; zapyso oblik %ROWTYPE; zapysg gazpr %ROWTYPE;

name_g gazpr.naz_g %TYPE; kod ALIAS FOR $1;

den INTEGER; mis INTEGER; rik INTEGER; ms CHARACTER(9) ARRAY[12];

slovo TEXT; s REAL; b BOOL;

BEGIN

den:=EXTRACT(DAY FROM CURRENT_DATE);

mis:=EXTRACT(MONTH FROM CURRENT_DATE);

rik:=EXTRACT(YEAR FROM CURRENT_DATE);

ms[1]:='січня'; ms[2]:='лютого'; ms[3]:='березня'; ms[4]:='квітня';

ms[5]:='травня'; ms[6]:='червня'; ms[7]:='липня'; ms[8]:='серпня';

ms[9]:='вересня'; ms[10]:='жовтня'; ms[11]:='листопада'; ms[12]:='грудня';

SELECT INTO name_g naz_g FROM gazpr WHERE kod_g = kod;

slovo:='                                         Звіт'||E'\n';

slovo:=slovo ||'про кількість транспортованого газу по газопроводу '||name_g||E'\n';

slovo:=slovo ||'станом на '||TO_CHAR(den,'99')||' '||ms[mis]||' '|| TO_CHAR(rik, '9999')||E'\n\n';

slovo:=slovo ||'Підприємство                  Кількість'||E'\n';

slovo:=slovo ||'-----------------------------------------------'||E'\n';

FOR zapysp IN SELECT * FROM pidpr ORDER BY naz_p LOOP

s:=0;

FOR zapyso IN SELECT * FROM oblik LOOP

b:=zapyso.kod_g=kod;

b:=b AND zapyso.kod_p=zapysp.kod_p;

b:=b AND rik=EXTRACT(YEAR FROM zapyso.data);

IF b THEN s:=s+zapyso.kilk; END IF;

END LOOP;

IF s>0 THEN slovo:=slovo||zapysp.naz_p||'           '||TO_CHAR(s,'99.9')||E'\n';

END IF;

END LOOP;

RETURN slovo;

END;

$$

LANGUAGE plpgsql;

select zvit_cykl(2);

                                                      Звіт

про кількість транспортованого газу по газопроводу Ямпіль-Ужгород-держкордон

станом на  12 квітня  2011

Підприємство                  Кількість

-----------------------------------------------

Експорттрансгаз             5.0

Прикарпаттрансгаз         2.0


 

А также другие работы, которые могут Вас заинтересовать

29852. Приоритетные национальные проекты России 14.98 KB
  Приоритетные национальные проекты России Приоритетные национальные проекты программа по росту человеческого капитала в России объявленная президентом России В. Проекты Программа приоритетных национальных проектов была сформулирована президентом России Владимиром Путиным 5 сентября 2005 года в обращении к правительству парламенту и руководителям регионов. Позднее на сайте появился документ Уточненные направления реализации приоритетного национального проекта Доступное и комфортное жилье гражданам России“ на 2009 2012 годы...
29853. Основные виды финансовых стратегии организации 14.33 KB
  Генеральной финансовой стратегией называют финансовую стратегию определяющую деятельность предприятия. Например взаимоотношения с бюджетами всех уровней образование и использование дохода предприятия потребности в финансовых ресурсах и источниках их формирования на год. [4; 322] Главной стратегической целью финансов является обеспечение предприятия необходимыми и достаточными финансовыми ресурсами. Финансовая стратегия предприятия в соответствии с главной стратегической целью обеспечивает: 1 формирование финансовых ресурсов и...
29854. Роль региональных и местных бюджетов в социально-экономическом развитии территорий 15.14 KB
  Роль региональных и местных бюджетов в социальноэкономическом развитии территорий Бюдже́т от старонормандского bougette кошель сумка кожаный мешок схема доходов и расходов определённого лица семьи бизнеса организации государства и т. Бюджет это важнейшая концепция как в микроэкономике так и в макроэкономике государственный бюджет. Изучением бюджета занимается наука финансы. Региональный бюджет совокупность валют правил и норм их использования взаимного обмена применения в качестве платежных средств а также...
29855. Валютные операции коммерческих банков, в России и за рубежом 18.25 KB
  Валютный рынок это вся совокупность конверсионных и кредитнодепозитных операций в иностранных валютах осуществляемых между контрагентами участниками валютного рынка. Валютные рынки можно классифицировать по следующим признакам: по виду операций. Например существует мировой рынок конверсионных операций в нём можно выделить сегменты конверсионных операций типа евро доллар или доллар иена а также мировой рынок кредитнодепозитных операций; по территориальному признаку. Текущие конверсионные операции по обмену одной валюты на другую а...
29856. Инновационная политика государства. Методы стимулирования и возможности. Мировой опыт 13.75 KB
  Под государственной инновационной политикой понимается комплекс целей а также методов воздействия государственных структур на экономику и общество в целом связанных с инициированием и повышением экономической и социальной эффективности инновационных процессов. Инновационная политика приобретает важное значение в условиях повышения инновационной активности коммерческих и государственных предприятий и структурной перестройки страны в целом. Формирование инновационной политики взаимосвязано прежде всего с переориентацией системы...
29857. Проблемы межбюджетных отношений и пути их решения 14.41 KB
  Проблемы межбюджетных отношений и пути их решения. Основная задача бюджетного федерализма заключается в том чтобы в конкретных экономических и политических условиях выбрать наиболее эффективную модель бюджетных отношений. Каждая страна решает задачу выбора модели бюджетных отношений посвоему. Эффективность межбюджетных отношений определяется не степенью централизации децентрализации бюджетной системы не наличием или отсутствием регулирующих налогов не долями доходов расходов федерального правительства не объемом и способами передачи...
29858. Иностранные инвестиции, их роль в экономике, создание благоприятного инвестиционного климата в РФ 15.6 KB
  Переход к устойчивому экономическому росту насущнейшая проблема развития экономики России успешное решение которой в первую очередь зависит от масштабного притока инвестиций в реальный сектор экономики. Привлечение иностранных инвестиций в российскую экономику должно способствовать решению следующих проблем социальноэкономического развития: освоение невостребованного научнотехнического потенциала России особенно на конверсируемых предприятиях военнопромышленного комплекса; продвижение российских товаров и технологий на внешний...
29859. Анализ финансового состояния компании и его содержания 16.82 KB
  Анализ финансового состояния компании и его содержания. Цель анализа состоит не только и не столько в том чтобы установить и оценить финансовое состояние предприятия но еще и в том чтобы постоянно проводить работу направленную на его улучшение. Анализ финансового состояния показывает по каким конкретным направлением надо вести эту работу дает возможность выявить наиболее важные аспекты и наиболее слабые позиции. Оценка финансового состояния может быть выполнена с различной степенью детализации в зависимости от цели анализа имеющейся...
29860. Направления совершенствования бюджетной классификации 12.67 KB
  направления совершенствования бюджетной классификации Бюджетная классификация Российской Федерации является группировкой доходов и расходов бюджетов всех уровней бюджетной системы Российской Федерации а также источников финансирования дефицитов этих бюджетов применяется при составлении проектов бюджетов и исполнении бюджетов всех уровней обеспечивает сопоставимость показателей бюджетов всех уровней бюджетной системы Российской Федерации. Бюджетная классификация Российской Федерации включает: 1 классификацию доходов бюджетов Российской...