Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 PLS-00801: internal error  [new]
Lav
Member

Откуда: Белокаменная
Сообщений: 220
CREATE OR REPLACE PROCEDURE test AS
	TYPE tSqls IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
	l_m tSqls;
BEGIN
	FORALL l_cnt IN INDICES OF l_m EXECUTE IMMEDIATE l_m(l_cnt);
END;


Compilation errors for PROCEDURE LAV.TEST

Error: PLS-00801: internal error [*** ASSERT at file pdw4.c, line  589; Unknown expression Expr = 283.; TEST__LAV__P__75295[5, 33]]
Line: 5
Text: FORALL l_cnt IN INDICES OF l_m EXECUTE IMMEDIATE l_m(l_cnt);




Что делать то, причем в другом месте использовал forall ... execute immediate и работало


SELECT * FROM V$version

BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE	10.2.0.3.0	Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
25 июн 07, 14:14    [4310694]     Ответить | Цитировать Сообщить модератору
 Re: PLS-00801: internal error  [new]
Lav
Member

Откуда: Белокаменная
Сообщений: 220
Народ, ну вы хоть скажите у вас-то так же или нет?

--
Все что НЕ делается все к лучшему...
25 июн 07, 14:32    [4310872]     Ответить | Цитировать Сообщить модератору
 Re: PLS-00801: internal error  [new]
Lav
Member

Откуда: Белокаменная
Сообщений: 220
CREATE OR REPLACE PROCEDURE test AS
	TYPE tSqls IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
	TYPE tr IS RECORD(
		lSQL VARCHAR2(1000),
		els  tSqls);
	TYPE TSqlMain IS TABLE OF tr INDEX BY BINARY_INTEGER;
	l_m TSqlMain;
BEGIN
	FORALL l_cnt IN INDICES OF l_m(1).els SAVE EXCEPTIONS EXECUTE IMMEDIATE
									l_m(1).lSQL USING l_m(1).els(l_cnt)
		;
END;


COMPILED SUCESSFULLY

25 июн 07, 14:34    [4310889]     Ответить | Цитировать Сообщить модератору
 Re: PLS-00801: internal error  [new]
Elic
Member

Откуда:
Сообщений: 29976
Lav
FORALL ... EXECUTE IMMEDIATE l_m(l_cnt);
Кури доку:
dynamic (EXECUTE IMMEDIATE) DML statement that references collection elements in the VALUES or WHERE clauses.
и почувствуй разницу между -надцатью parse-ами и -надцатью execute-ами :)
25 июн 07, 14:40    [4310937]     Ответить | Цитировать Сообщить модератору
 Re: PLS-00801: internal error  [new]
Lav
Member

Откуда: Белокаменная
Сообщений: 220
Вообщем методом проб и ошибок можно получить аксиому:


Для
Forall ... execute immediate l_sql using l_params 

l_sql - ДОЛЖНА БЫТЬ КОНСТАНТА
l_params - может меняться


в противном случае INTERNAL ERROR
25 июн 07, 14:41    [4310940]     Ответить | Цитировать Сообщить модератору
 Re: PLS-00801: internal error  [new]
Lav
Member

Откуда: Белокаменная
Сообщений: 220
Elic
Lav
FORALL ... EXECUTE IMMEDIATE l_m(l_cnt);
Кури доку:
dynamic (EXECUTE IMMEDIATE) DML statement that references collection elements in the VALUES or WHERE clauses.
и почувствуй разницу между -надцатью parse-ами и -надцатью execute-ами :)



Понял, спасибо.
25 июн 07, 14:41    [4310944]     Ответить | Цитировать Сообщить модератору
 Re: PLS-00801: internal error  [new]
Lav
Member

Откуда: Белокаменная
Сообщений: 220
Elic
Lav
FORALL ... EXECUTE IMMEDIATE l_m(l_cnt);
Кури доку:
dynamic (EXECUTE IMMEDIATE) DML statement that references collection elements in the VALUES or WHERE clauses.
и почувствуй разницу между -надцатью parse-ами и -надцатью execute-ами :)



Но согласитесь, что Internal Error не самый лучший способ сообщать об ошибках ;)
25 июн 07, 14:42    [4310951]     Ответить | Цитировать Сообщить модератору
 Re: PLS-00801: internal error  [new]
Elic
Member

Откуда:
Сообщений: 29976
Lav
Но согласитесь, что Internal Error не самый лучший способ сообщать об ошибках ;)
Нормальный. Это просто будующий PLS-xxxxx.
Закон Мерфи: "Всегда найдётся раздолбай, попытающийся сделать невообразимое"
25 июн 07, 14:47    [4310976]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить