11 ноября 2008

Создание представления в PL/SQL c помощью execute immediate

Вот пытаюсь выполнить PL/SQL код, который должен создать представление в базе данных:
declare
begin
execute immediate 'create or replace force view test_view1 ("f1","F2") as select 0, sysdate from dual;';
end;
/
И получаю совершенно неожиданный результат, а именно исключение:
ORA-00911: invalid character
ORA-06512: at line 3
00911. 00000 - "invalid character"
*Cause: identifiers may not start with any ASCII character other than ...

И это при том, что SQL команда по созданию этого представления успешно протестированна и выполняется без ошибок.
В заблуждение вводит текст исключения, потому что хочется сразу проверить введённое имя представления, хоть оно и правильное. Методом проб и ошибок (точенее одной пробы) удалось установить что вызвало это исключение.
Причина - это точка с запятой указанная после ключевого слова dual ... всё логично, но при такой обработке исключение довольно сложно обнаружить такую ошибку.

И ещё одна заметка на эту тему : названия полей для представлений должны быть написаны большыми буквами!!! Такую ошибку также довольно сложно обнаружить, и притом не на этапе создания представления, а лишь на этапе тестирования, выполняя запросы к представлению.
Например в моём случае , запрос:
seleсt f2 from test_view1 успешно выполниться , в то время как
seleсt f1 from test_view1 сообщит мне что колонки f1 в таблице нету ...

Будьте бдительны).


Комментариев нет: