powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PRAGMA RESTRICT REFERENCES
32 сообщений из 32, показаны все 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
PRAGMA RESTRICT REFERENCES
    #39896434
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

например, непонятно, как без использования restrict_references сделать так, чтобы человек физически не смог скомпилировать пакет, если он добавил использование глобальных переменных туда, куда не следует.
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #39896457
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кит северных морей
чтобы человек физически не смог скомпилировать пакет, если он добавил использование глобальных переменных туда, куда не следует.
Кого/что от кого/чего ты хотел бы "защитить"? И зачем?
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #39896506
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже прочитал, что прагмы устарели и Oracle сам определяет применимость функций.
Но прагмы все равно удобны, чтобы обнаружить нарушения уже при компиляции.
Меня больше интересует, почему у меня нарушается прагма (WNDS, RNDS, WNPS, RNPS).
У меня в коде есть фрагмент, где используется функция regexp_like и исключения. Когда я этот фрагмент удаляю/комментирую, компиляция проходит успешно. То есть что-то во фрагменте нарушает прагму?
Однако если из декларации удалить прагму и скомпилировать функцию использованием regexp_like и исключений, то я ее успешно использую в select и update запросах — то есть по меньшей мере WNDS и RNDS соблюдаются.
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #39896613
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
кит северных морей
чтобы человек физически не смог скомпилировать пакет, если он добавил использование глобальных переменных туда, куда не следует.
Кого/что от кого/чего ты хотел бы "защитить"? И зачем?
сейчас (почти) все имеющиеся вызовы pl/sql, условно, stateless. я хочу быть уверен, что они останутся таковыми. я понимаю, что restrict_references тоже не панацея (например, WNPS без WNDS позволит процессу записать в GTT, и не прибрать за собой), но лучше так, чем никак.
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #39896652
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кит северных морей
хочу быть уверен, что они останутся таковыми.
Т.е. ты хочешь подстраховаться от себя самого?
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #39896653
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
То есть что-то во фрагменте нарушает прагму?
Да. Но не то, что тебе кажется.

P.S. Явное указание RESTRICT_REFERENCES требует явного же указания RESTRICT_REFERENCES во всех (рекурсивно) используемых пакетах, насколько я помню. Это бессмысленная трата времени. Поэтому в своём коде давно удалил, чего и другим советую.
...
Рейтинг: 0 / 0
PRAGMA RESTRICT REFERENCES
    #39896668
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
кит северных морей
хочу быть уверен, что они останутся таковыми.
Т.е. ты хочешь подстраховаться от себя самого?
не обязательно, но даже если и от себя - не вижу в этом ничего зазорного. я живой человек, я делаю ошибки. чем больше средств пассивной безопасности есть в моем распоряжении - тем лучше.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PRAGMA RESTRICT REFERENCES
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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