2015-01-05 11 views
0

Если я выполняю отдельные инструкции SQL на рабочем листе (например, CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity';), то работает правильно. Подведем в анонимном блоке, как это:Как выполнить анонимный блок plpgsql в Oracle SQL Developer?

DO 
$$ 
BEGIN 
    CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity'; 
END 
$$; 

и я получаю следующее сообщение об ошибке:

Error starting at line : 3 in command - 
BEGIN 
    CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity'; 
END 
$$; 
Error report - 
ERROR: syntax error at or near "CREATE" 
    Position: 10 

Однако тот же сценарий отлично работает, когда я исполню ее в Psql оболочке. Мне что-то не хватает?

Использование:
PostgreSQL версии 9.4
драйвер Postgres JDBC для PostgreSQL 9.3-1102.jdbc41
SQL Developer версии 4.0 (JDK 1.7.0_71)

+1

Вы пытались '/' на одной строке после блока? Я не думаю, что ** Oracle ** SQL Developer понимает долларовое цитирование Postgres. Таким образом, вы также можете использовать обычные одинарные кавычки вместо '$$' (конечно, вам нужно удвоить встроенные одинарные кавычки) –

+0

Пробовал и получил тот же результат. – Ragnar

+1

Тогда я думаю, что SQL-разработчик Oracle не является хорошим выбором для работы с Postgres. –

ответ

0

Источник ошибки неспособность JDBC иметь дело с долларовым котированием правильно (пока). Относящиеся ответ:

Вы можете быть в состоянии обойти проблема в данном случае с:

DO 
' 
BEGIN 
    CREATE ROLE my_user LOGIN PASSWORD ''my_pwd'' VALID UNTIL ''infinity''; 
END 
'; 

Если это не сделать трюк, попробуйте установить a разные терминатор запросов, как указано в linked answer.

Вы, кажется, знаете, что вам не нужен оператор DO для кода примера. Just:

CREATE ROLE my_user LOGIN PASSWORD 'my_pwd' VALID UNTIL 'infinity'; 
+0

Я использовал только один оператор только для этого примера, но на самом деле мне нужно объединить несколько операторов. Например: 'BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '' my_user '') THEN CREATE ROLE my_user LOGIN PASSWORD '' my_pwd '' VALID UNTIL '' бесконечность ''; END IF; END'. Я попробовал то, что вы предложили, и он все еще не работает. ERROR: синтаксическая ошибка в или рядом с «CREATE» ' – Ragnar

+0

@Ragnar: Тогда я попытался бы установить другой терминатор запросов. См. Добавленное примечание в ответе, а также [связанный ответ] (http://stackoverflow.com/questions/22747225/exceptions-when-creating-a-trigger-in-postgresql-9-1/22748778#22748778). –

Смежные вопросы