Я использую Oracle 11g. Мои таблицы включают такие столбцы, как имя и l_name (строчные буквы столбца имени). Я пытаюсь перебрать все столбцы в моем табличном пространстве, чтобы установить столбцы l_ в нижний регистр соответствующих столбцов в верхнем регистре. Вот что я пробовал:
for i in (select table_name from user_tables) loop
SELECT SUBSTR(column_name,3) bulk collect into my_temp_storage FROM user_tab_columns WHERE table_name = i.table_name and column_name like 'L\_%' escape '\';
for j in (select column_name from user_tab_columns where table_name = i.table_name) loop
for k in 1..my_temp_storage.count
loop
if(j.column_name like 'L\_%' escape '\' and SUBSTR(j.column_name,3) = my_temp_storage(k)) then
DBMS_OUTPUT.PUT_LINE( 'update ' || i.table_name || ' set ' || j.column_name || ' = LOWER(' ||my_temp_storage(k)|| ') where ' || j.column_name || ' is not null');
execute immediate 'update ' || i.table_name || ' set ' || j.column_name || ' = LOWER(' ||my_temp_storage(k)|| ') where ' || j.column_name || ' is not null';
end if;
end loop;
end loop;
end loop;
Я сохраняю все имена столбцов в верхнем регистре в my_temp_storage и обновляю таблицу МНИЖНИМ значением столбцов в my_temp_storage. Это дало мне сообщение об ошибке:
Error report -
ORA-00900: invalid SQL statement
ORA-06512: at line 8
00900. 00000 - "invalid SQL statement"
*Cause:
*Action:
Но вывод СУБД выглядел нормально:
`update EMPLOYEE set L_NAME = LOWER(NAME) where L_NAME is not null`
Не могли бы вы помочь мне так, как я это сделал, или как-то иначе?
begin
иend
вокруг этого? И заявление дляmy_temp_storage
? - person Alex Poole   schedule 10.11.2016name
последним выводом, который вы получаете перед ошибкой? Если нет, то что? Пробуя ваш код,name
не выдает эту ошибку. - person Alex Poole   schedule 10.11.2016