powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PRAGMA RESTRICT REFERENCES
25 сообщений из 32, страница 1 из 2
PRAGMA RESTRICT REFERENCES
    #34339867
dvasilev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. После установки патча системы Босс-кадровик образовались разкомпилленые пакеты. В спецификации функции описаны с 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
PRAGMA RESTRICT REFERENCES
    #34339873
dvasilev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия Oracle 9.2.0.6
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #34339898
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #34341541
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicRTFM RNDS (FAQ)
Elic, слышал такую утку (в частной беседе),
что RESTRICT REFERENCES "устарела" (ненужная),
и из пакетов изживать надо
.......
stax
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #34341555
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax.слышал такую утку (в частной беседе),
что RESTRICT REFERENCES "устарела" (ненужная),
и из пакетов изживать надо
.......
почему утка. Oracle сам уже в силах определить чистоту функции, подсказки ему типа не нужны :)
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #34341577
Фотография 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 .
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #34341586
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34341625
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34341638
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmidekКстати, а у автора же не RNDS, а WNDS ...А ведь действительно :) Даже скорее WNPS.

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

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

зы
по совету старших товарищей в новых не прописываю RESTRICT REFERENCES,
в старых если правлю то Workaround: Remove the pragma restrict_references
.....
stax
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #34341817
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34341863
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34341899
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34342105
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic Stax.отразили б это в документации, типа RESTRICT REFERENCES токо для компабилити, RTFM 10g: PRAGMA RESTRICT_REFERENCES – for Backward Compatibility (FAQ)

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

а то
родной ораклячий не понял фразу
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
PRAGMA RESTRICT REFERENCES
    #34342189
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34342223
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34342249
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34342417
Sxak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34342448
Stax.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PRAGMA RESTRICT REFERENCES
    #34342550
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sxakсообтвтственно если в теле функции находится что-то что конфликтует с такой прагмой это вызывает ошибку компиляяции Кстати просто вызов не пакетных функция тоже такое ажется вызывалМожет стоит помолчать до восстановления дикции/координации?!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
PRAGMA RESTRICT REFERENCES
    #39895998
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, могут ли regexp_like или exceptions нарушать прагму WNDS, RNDS, WNPS, RNPS ?
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #39896044
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
Подскажите, могут ли regexp_like или exceptions нарушать прагму WNDS, RNDS, WNPS, RNPS ?
Чудак, ты в курсе, что они уже устарели? Но в любом случае читай доку тщательней, чтобы не задавать дурацких вопросов.
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #39896058
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Alibek B.
Подскажите, могут ли regexp_like или exceptions нарушать прагму WNDS, RNDS, WNPS, RNPS ?
Чудак, ты в курсе, что они уже устарели? Но в любом случае читай доку тщательней, чтобы не задавать дурацких вопросов.

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


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