Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PRAGMA RESTRICT REFERENCES / 25 сообщений из 32, страница 1 из 2
19.02.2007, 08:28
    #34339867
dvasilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Добрый день. После установки патча системы Босс-кадровик образовались разкомпилленые пакеты. В спецификации функции описаны с PRAGMA RESTRICT REFERENCES...при компиляции пакета вылетает ошибка :

PLS-00452: Subprogram 'NDOP' violates its associated pragma

Для чего нужна эта прагма (объясните по простому по русски) и в чем ошибка???



FUNCTION ndop(pcid IN number, nm IN number DEFAULT NULL) RETURN number;
PRAGMA RESTRICT_REFERENCES (ndop, WNDS, WNPS);


FUNCTION ndop(pcid IN number, nm IN number DEFAULT NULL) RETURN number IS
nn number;
BEGIN
if pcid IS NULL then
RETURN NULL;
end if;
if pcid >= 0 then
if nm IS NOT NULL then
SELECT count(*) INTO nn
FROM sl_is_stag WHERE pc_id = pcid AND num = nm AND num2 > 0;
else -- это ID основной записи о стаже
SELECT count(*) INTO nn
FROM sl_is_stag s1, sl_is_stag s2
WHERE s1.id = pcid
AND s1.pc_id = s2.pc_id
AND s1.num = s2.num
AND s2.num2 > 0;
end if;
else
if nm IS NOT NULL then
SELECT count(*) INTO nn
FROM sl_is_stag WHERE isk_id = -pcid AND num = nm AND num2 > 0;
else
RETURN 0;
end if;
end if;
RETURN nn;
END ndop ;
...
Рейтинг: 0 / 0
19.02.2007, 08:31
    #34339873
dvasilev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Версия Oracle 9.2.0.6
...
Рейтинг: 0 / 0
19.02.2007, 08:51
    #34339898
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
...
Рейтинг: 0 / 0
19.02.2007, 16:16
    #34341541
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
ElicRTFM RNDS (FAQ)
Elic, слышал такую утку (в частной беседе),
что RESTRICT REFERENCES "устарела" (ненужная),
и из пакетов изживать надо
.......
stax
...
Рейтинг: 0 / 0
19.02.2007, 16:19
    #34341555
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Stax.слышал такую утку (в частной беседе),
что RESTRICT REFERENCES "устарела" (ненужная),
и из пакетов изживать надо
.......
почему утка. Oracle сам уже в силах определить чистоту функции, подсказки ему типа не нужны :)
...
Рейтинг: 0 / 0
19.02.2007, 16:22
    #34341577
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Stax. ElicRTFM RNDS (FAQ) Elic, слышал такую утку (в частной беседе), что RESTRICT REFERENCES "устарела" (ненужная), и из пакетов изживать надоЭто не утка и в ссылке чуть выше про это написано. Но изживать её нет необходимости, она полезна для ранней диагностики ошибок: Oracle9i Application Developer's Guide - Fundamentals -> PL/SQL Compilation CheckingPRAGMA RESTRICT_REFERENCES remains available as a means of asking the PL/SQL compiler to verify that a function has only the side effects that you expect. SQL statements, package variable accesses, or calls to functions that violate the declared restrictions will continue to raise PL/SQL compilation errors to help you isolate the code that has unintended effects .
...
Рейтинг: 0 / 0
19.02.2007, 16:24
    #34341586
dmidek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Elic Stax. ElicRTFM RNDS (FAQ) Elic, слышал такую утку (в частной беседе), что RESTRICT REFERENCES "устарела" (ненужная), и из пакетов изживать надоЭто не утка и в ссылке чуть выше про это написано. Но изживать её нет необходимости, она полезна для ранней диагностики ошибок: Oracle9i Application Developer's Guide - Fundamentals -> PL/SQL Compilation CheckingPRAGMA RESTRICT_REFERENCES remains available as a means of asking the PL/SQL compiler to verify that a function has only the side effects that you expect. SQL statements, package variable accesses, or calls to functions that violate the declared restrictions will continue to raise PL/SQL compilation errors to help you isolate the code that has unintended effects .

Кстати, а у автора же не RNDS, а WNDS ...
...
Рейтинг: 0 / 0
19.02.2007, 16:33
    #34341625
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Elic Stax. ElicRTFM RNDS (FAQ) Elic, слышал такую утку (в частной беседе), что RESTRICT REFERENCES "устарела" (ненужная), и из пакетов изживать надоЭто не утка и в ссылке чуть выше про это написано. Но изживать её нет необходимости, она полезна для ранней диагностики ошибок: Oracle9i Application Developer's Guide - Fundamentals -> PL/SQL Compilation CheckingPRAGMA RESTRICT_REFERENCES remains available as a means of asking the PL/SQL compiler to verify that a function has only the side effects that you expect. SQL statements, package variable accesses, or calls to functions that violate the declared restrictions will continue to raise PL/SQL compilation errors to help you isolate the code that has unintended effects .
я ж нарошно написал утка, обычно я на слово не верю
напр вот еще ссылочка
https://www.metalink.oracle.com/metalink/plsql/f?p=130:14:3283734815740046997::::p14_database_id,p14_docid,p14_show_header,p14_show_help,p14_black_frame,p14_font:NOT,376803.1,1,1,1,helvetica]Solution
Remove the pragma reference or ensure they are all the same.

Removing the PRAGMA reference may be best as the Application Developer's Guide within the chapter "Using Procedures
and Packages" mentions that starting with 9i, the PRAGMA RESTRICT_REFERENCES doesn't need to be used and provided for backwards compatibility. It also states, it should not be used with any new code .


я об этом not be used with any new code
.......
stax
...
Рейтинг: 0 / 0
19.02.2007, 16:36
    #34341638
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
dmidekКстати, а у автора же не RNDS, а WNDS ...А ведь действительно :) Даже скорее WNPS.

2 dvasilev
В пекете есть блок инициализации или инициализируемые глобальные переменные?
Собственно у самого пакета какая pragma?
...
Рейтинг: 0 / 0
19.02.2007, 16:58
    #34341751
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
alex-ls Stax.слышал такую утку (в частной беседе),
что RESTRICT REFERENCES "устарела" (ненужная),
и из пакетов изживать надо
.......
почему утка. Oracle сам уже в силах определить чистоту функции, подсказки ему типа не нужны :)
почему я считаю такое уткой, не видел прямого текста в доке,
мож из-за невнимательности, часто из-за незнания английского

отразили б это в документации,
типа RESTRICT REFERENCES токо для компабилити,
мол на самам деле компилатор сам разбирается, а-ля TRUST

зы
по совету старших товарищей в новых не прописываю RESTRICT REFERENCES,
в старых если правлю то Workaround: Remove the pragma restrict_references
.....
stax
...
Рейтинг: 0 / 0
19.02.2007, 17:12
    #34341817
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Elic
В пекете есть блок инициализации или инициализируемые глобальные переменные?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Oracle9i Enterprise Edition Release  9 . 2 . 0 . 6 . 0  - Production

create or replace package p_wnps is
sum number;
function f(n number) return number;
PRAGMA RESTRICT_REFERENCES (f, WNDS, WNPS);
end;
/
create or replace package body p_wnps is
function f(n number) return number is
begin
 return n;
end;
begin
 p_wnps.sum:= 0 ;
end;
/
SQL> /

Package body created.

SQL> select p_wnps.f( 1 ) f from dual;

        F
---------
         1 
......
stax
...
Рейтинг: 0 / 0
19.02.2007, 17:20
    #34341863
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Stax.отразили б это в документации, типа RESTRICT REFERENCES токо для компабилити, RTFM 10g: PRAGMA RESTRICT_REFERENCES – for Backward Compatibility (FAQ)
И тем не менее вовсю используется:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
C:\Ora102\RDBMS\ADMIN>grep -i -c "PRAGMA restrict_references" *.sql | sort -t : -k 2 -n | grep -v ":0"
catodci.sql:1
dbmsiotc.sql:1
dbmsoctk.sql:1
dbmsrgt.sql:1
dbmsxmlt.sql:1
initxa.sql:1
privowa.sql:1
dbmsspc.sql:2
dbmssupp.sql:2
pubowa.sql:2
pubimg.sql:3
puboolk.sql:3
pubutil.sql:3
pubutil8.sql:3
plspur.sql:4
dbmsotpt.sql:8
dbmsrand.sql:8
utlpg.sql:9
dbmsspu.sql:12
dbmsstat.sql:15
catxdbs.sql:18
dbmspipe.sql:18
initdbj.sql:18
dbmsobtk.sql:19
dbmsutil.sql:21
dbmslob.sql:23
utlfile.sql:24
utlraw.sql:26
plitblm.sql:27
dbmsstdx.sql:31
utlhttp.sql:52
dbmsgen.sql:59
pubht.sql:90
pubht8.sql:90
dbmssql.sql:178
...
Рейтинг: 0 / 0
19.02.2007, 17:29
    #34341899
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
ElicИ тем не менее вовсю используется:


Well, используется so one could use PRAGMA RESTRICT REFERENCES. If supplied packages would not have PRAGMA RESTRICT REFERENCES, one could not write stored code with PRAGMA RESTRICT REFERENCES that calls supplied packages.

SY.
...
Рейтинг: 0 / 0
19.02.2007, 18:28
    #34342105
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Elic Stax.отразили б это в документации, типа RESTRICT REFERENCES токо для компабилити, RTFM 10g: PRAGMA RESTRICT_REFERENCES – for Backward Compatibility (FAQ)

Спасибо Elic, вот это я и хотел
Куда мои глаза смотрели
......
stax
...
Рейтинг: 0 / 0
19.02.2007, 18:46
    #34342159
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
А вот такой вопрос, как в оракловской доке искать фразы
(поиск по нескольких словах, по точной фразе)

а то
родной ораклячий не понял фразу
Your search term "PRAGMA RESTRICT_REFERENCES – for Backward Compatibility" did not match any topics.

Tips:

Check the spelling of each word.
Search for a shorter phrase.
Use more general terms instead of specific keywords.
Check your use of spaces and punctuation characters.
зы
google находит

......
stax
...
Рейтинг: 0 / 0
19.02.2007, 18:59
    #34342189
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Stax.А вот такой вопрос, как в оракловской доке искать фразы
(поиск по нескольких словах, по точной фразе)

нашел, не на той страничке искал?
надо было
http://www.oracle.com/pls/db102/search?

а я почему-то
http://www.oracle.com/pls/db10g/search?remark=quick_search&word=PRAGMA+RESTRICT_REFERENCES+%26%238211%3B+for+Backward+Compatibility
видать quick_search помешал

.....
stax
...
Рейтинг: 0 / 0
19.02.2007, 19:13
    #34342223
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Stax. ElicВ пекете есть блок инициализации или инициализируемые глобальные переменные?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create or replace package p_wnps is
sum number;
function f(n number) return number;
PRAGMA RESTRICT_REFERENCES (f, WNDS, WNPS);
end;
/
create or replace package body p_wnps is
function f(n number) return number is
begin
 return n;
end;
begin
 p_wnps.sum:= 0 ;
end;
/

Package body created.
Да... Что-то когда-то я упустил. Даже на 7-ке чтение/изменение собственных переменных в инициализации пакета не нарушает [RW]NPS ни самого пакета, ни его процедур/функций.
Но прагма нарушается, если в инициализации использовать нарушающие процедуры/функции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create or replace package body p_wnps as
function f(n number) return number
is
begin
  return n;
end;
begin
  dbms_pipe.reset_buffer;
end;
/
show err

Errors for PACKAGE BODY P_WNPS:

Line/Col Error Message
-------- ---------------------------------------------------------
 3 / 1       PLS- 00452 : Subprogram 'F' violates its associated pragma
...
Рейтинг: 0 / 0
19.02.2007, 19:27
    #34342249
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Elic
Но прагма нарушается, если в инициализации использовать нарушающие процедуры/функции

да, помню это, вроде безобидный вызов dbms_%.ой нарушал прагму

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
create or replace package p_wnps is
sum number;
function f1(n number) return number;
PRAGMA RESTRICT_REFERENCES (f1, WNDS, WNPS);
function f2(n number) return number;
PRAGMA RESTRICT_REFERENCES (f2, WNDS, WNPS,RNDS,RNPS);
end;
/
create or replace package body p_wnps is
function f1(n number) return number is
begin
 return n;
end;
function f2(n number) return number is
begin
 return f1(n);
end;
begin
 p_wnps.sum:= 0 ;
end;
/
SQL> show err
Errors for PACKAGE BODY P_WNPS:

LINE/COL ERROR
-------- -----------------------------------------------------------------
 6 / 1       PLS- 00452 : Подпрограмма 'F2' нарушает свою прагму
SQL> 
хоть на самом деле f1 тоже RNDS,RNPS

......
stax
...
Рейтинг: 0 / 0
19.02.2007, 21:13
    #34342417
Sxak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
dvasilevДобрый день. После установки патча системы Босс-кадровик образовались разкомпилленые пакеты. В спецификации функции описаны с PRAGMA RESTRICT REFERENCES...при компиляции пакета вылетает ошибка :

PLS-00452: Subprogram 'NDOP' violates its associated pragma
По моему на 8ке уже такие прагмы не нужны были. Сам всегда привык был их писать
А вообще pragma_restrict_references (имя_функции,через запятую всякие (w/r)n(p/d)s)
в 1й части w означает что не пишет, r чтоне читает во 1й части p что переменные пакета d что данные (не селектит или не апдейтит/инсертит/делетит таблицы) сообтвтственно если в теле функции находится что-то что конфликтует с такой прагмой это вызывает ошибку компиляяции Кстати просто вызов не пакетных функция тоже такое ажется вызывал
...
Рейтинг: 0 / 0
19.02.2007, 21:42
    #34342448
Stax.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
SxakКстати просто вызов не пакетных функция тоже такое ажется вызывал
никогда не умер указать прагму для "не пакетных функций"
куда ее (прагму) впихнуть?
Код: plaintext
1.
2.
3.
4.
5.
6.
create or replace function f_pragma return number is
PRAGMA RESTRICT_REFERENCES (f_pragma, WNDS, WNPS);
begin
 return  1 ;
end;
/
......
stax
...
Рейтинг: 0 / 0
20.02.2007, 00:19
    #34342550
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Sxakсообтвтственно если в теле функции находится что-то что конфликтует с такой прагмой это вызывает ошибку компиляяции Кстати просто вызов не пакетных функция тоже такое ажется вызывалМожет стоит помолчать до восстановления дикции/координации?!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
29.11.2019, 00:13
    #39895998
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Подскажите, могут ли regexp_like или exceptions нарушать прагму WNDS, RNDS, WNPS, RNPS ?
...
Рейтинг: 0 / 0
29.11.2019, 07:44
    #39896044
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Alibek B.
Подскажите, могут ли regexp_like или exceptions нарушать прагму WNDS, RNDS, WNPS, RNPS ?
Чудак, ты в курсе, что они уже устарели? Но в любом случае читай доку тщательней, чтобы не задавать дурацких вопросов.
...
Рейтинг: 0 / 0
29.11.2019, 08:26
    #39896058
кит северных морей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
Elic
Alibek B.
Подскажите, могут ли regexp_like или exceptions нарушать прагму WNDS, RNDS, WNPS, RNPS ?
Чудак, ты в курсе, что они уже устарели? Но в любом случае читай доку тщательней, чтобы не задавать дурацких вопросов.

а что предлагается им взамен? дока говорит, что parallel_enable и deterministic. окей, допустим. но эти две кляузы, в отличие от restrict_references, не обязывают функцию им соответствовать. т.е., по сути, это что-то вроде restrict_references + trust. но если я хочу гарантировать отсутствие побочек на этапе компиляции?
...
Рейтинг: 0 / 0
29.11.2019, 09:09
    #39896078
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PRAGMA RESTRICT REFERENCES
кит северных морей
но если я хочу гарантировать отсутствие побочек на этапе компиляции?
Что непонятного в том, что уже давно эти прагмы определяются автоматом без необходимости их указывать. Явными прагмами можно только понизить употребимость.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PRAGMA RESTRICT REFERENCES / 25 сообщений из 32, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]