2017-02-15 13 views
2

Я пытаюсь изменить сеанс в блоке PL/SQL с помощью динамического SQL, но он не работает. Я использую следующий скрипт:Динамический «смена сеанса» в блоке PL/SQL

BEGIN 
EXECUTE IMMEDIATE 'ALTER SESSION SET ISOLATION_LEVEL=READ COMMITED;'; 
UPDATE Test."column" SET "columnName" = 5 WHERE "columnType" = 606; 
end 

Ошибки я получаю это:

ORA-00922: missing or invalid option 
ORA-06512: at line 2 

Я не уверен, что я делаю неправильно, делает Oracle предотвращать изменение сессий после того, как с помощью начать заявление?

+1

[ 'совершенного' имеет два «т-х] (http://docs.oracle.com/database/121/SQLRF/statements_2015.htm#SQLRF53047). Вероятно, вы также захотите удалить точку с запятой с конца динамического оператора. –

+0

Я попробовал это, и я получаю следующее: ORA-06550: строка 3, столбец 1: PLS-00103: встречается символ «ОБНОВЛЕНИЕ» при ожидании одного из следующих: * & = - +; at in is mod остаток не возвращается – TechNerd

+1

Неверный; Я имел в виду точку с запятой * внутри * динамическую инструкцию, так как обычно это приводит к ошибке ORA-00911: 'EXECUTE IMMEDIATE 'ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED';' –

ответ

1

Вы пропустили один из Ц от COMMITTED, и вы, как правило, получите неправильную ошибку символа ORA-00911, если у вас есть точка с запятой внутри динамического оператора, который вы пытаетесь выполнить.

Оно должно быть:

EXECUTE IMMEDIATE 'ALTER SESSION SET ISOLATION_LEVEL=READ COMMITTED'; 
+0

Есть ли шанс, что вы можете мне помочь в том, как добавить это в первые шаги миграции кода Entity Framework? как при добавлении его к методу Up(), используя: Sql («ALTER SESSION SET ISOLATION_LEVEL = READ COMMITED»); похоже, что EF не может перевести то, что у меня есть. – TechNerd

+0

@TechNerd - извините, не знаю, никогда не использовал EF. Но проверьте, что у него нет собственного способа установить уровень изоляции; и может ли он запустить весь анонимный блок в вызове 'sql()', может быть, немного взломан. –

+2

Вы еще не указали 'T' в выражении 'Sql()' в комментарии выше. –