Toad

Toad (англ. лягушка) , как и SQLyog занимается администированием серверов БД, но отличительная и незаменимая особенность - возможность работы с Oracle (хотя есть и поддержка DB2, MySQL, MSSQL)

Для моделирования БД, компания предлагает серию Toad Data Modeler где поддерживается также уйма БД и можно всё красиво нарисовать.

Мигрируя из mysql в Oracle

No Limits

В Oracle нет конструкции LIMIT 0,10, ограничивающей число результатов. Вместо этого следует использовать в WHERE области такое поле как ROWNUM. А что-бы эмулировать не только число результатов, но и offset, попробуйте запрос с внутренними подзапросами..

SELECT * FROM (SELECT rownum as linenum, tempSubReq.* FROM (SELECT * FROM MY_TEST_TABLE WHERE MY_NAME= 'ARTJOM KURAPOV') tempSubReq WHERE rownum <= 11) WHERE linenum >= 2

Access denied

В Oracle существует системная таблица пользователей, которым можно присвоить и отнять привилегии на работу с БД, поэтому не удивляйтесь если работая с чужим сервером у вас вдруг не работает ALTER TABLE..revoke all on cms_content from juribigА в общем синтаксис выглядит как

{grant/revoke} {select/update/delete/insert/references/alter/index} on {имятаблицы/имяфункции} from {имяпользователя/public}

Date format?

По сравнению с Mysql, Oracle имеет свои методы работы с датами..

Так вместо функции NOW() или CURTIME(), Oracle имеет SYSDATE

SELECT DAYOFMONTH(MAX(post_date)) AS lastday,MONTH(MAX(post_date)) AS lastmonth ...

в свою очередь превращаются в

SELECT TO_CHAR(MAX(post_date), 'DD') AS lastday, TO_CHAR(MAX(post_date), 'MM') AS lastmonth

Autoincrement

Oracle отличается наличием своего языка PL/SQL, и наличием такого понятия как sequence, что и заменяет необходимость в отдельном параметре стобца как автоувеличение. Впрочем некоторые умники пытались избежать их изучения, но это не совсем грамотное решение.

Oracle errors

Cannot insert NULL into

Ячейка таблицы имеет параметр NOT NULL, значит при INSERT обязательно упоминание этой ячейки

invalid identifier

Неправильное имя у ячейки таблицы. Заметьте, что все имена должны быть заглавными буквами. Что-бы исключить ошибку с использованием зарезервированных слов - используйте двойные кавычки при обращении с данными
ORA-00911: invalid characterИспользуйте двойные кавычки при работе с данными и называйте колонки только буквами и цифрами

ORA-01741:
illegal zero-length identifier

Данные не могут быть пустыми

ORA-00926: missing VALUES keyword

В отличие от Mysql, где можно использовать
INSERT INTO mytable SET mycolumn=myvalue в Oracle INSERT процедура происходит только в формате
INSERT INTO mytable (ID,mycolumn) VALUES (1,"myvalue")

ORA-01861: literal does not match format string Возможно проблема с форматами данных типа date.
to_date('2008-08-13','yyyy-mm-dd');

ORA-07217 sltln: environment variable cannot be evaluated

Вероятно неуказан SID (т.е. домен или IP host-сервера)
ORA-01722: invalid numberВы пытаетесь использовать string-тип вместо integer-типа данных стобца (не надо заключать integer в кавычки при INSERT)

ORA-01756: quoted string not properly terminated

В данных - открытый апостроф, либо данные не заключены в парные апострофы. В Mysql данные используется система преобразования ' в \' , не без помощи addslashes в php. В Oracle же апостроф просто дублируется (' в '').. В php - через
str_replace("'","''",$src);
ORA-01704: string literal too long

Даже с использованием типов данных, поддерживающих более 4 тыс. символов, Oracle не любит длинные SQL и большие данные предпочитает принимать через PL/SQL декларации . С десятой версии Oracle это ограничение поднято до 20 тыс. declare
myClobVar varchar2(32767) := 'string >4000 and <32767 bytes';
begin
update tableWithClob set clobcol = myClobVar;
end;

Как второсортное решение - использовать постепенный UPDATE. rpad в данном примере просто генерирует кучу символов, не обращайте внимания.

UPDATE tableWithClob SET clobcol=clobcol||(rpad('X', 2300)) WHERE ID=17 

 

Введение в Oracle

Oracle - СУБД для "промышленности", часто устанавливаемая в больших корпорациях. Отличается надёжностью и техническими изысками. С документацией увы дело туго. Для соединения через php, можно использовать adoDB библиотеку.

Для начала полезные запросы:

select * from product_component_version
select * from ALL_TABLES
select * from USER_TABLES
select * from TABLE_PRIVILEGES

Это даст версию Oracle стоит ( например Oracle9i Enterprise Edition 9.2.0.6.0 ), все таблицы, вместе с системными таблицами и просто пользовательские таблицы, а так же доступ к ним.

Хочется редактировать таблицы/ряды визуально, не вбивая в каждом случае SQL?

  • Oracle Apex , ранее известный как HTML DB схож с phpMyAdmin и позволяет редактировать объекты (таблицы, тригеры и тп.)
  • Oracle editor достаточно прост и практичен, если доступа к Apex нет.
  • PhpOracleAdmin как проект умер, впрочем и установка невозможна из-за ошибок
    Variable missed mode
  • Ajaxora - opensource приложение написанное на соревновании Winter of Code.

Критичные отличия Oracle от MySQL, из-за которых возможно прийдётся глобально изменять вашу платформу:

  1. Все имена колонок пишутся заглавными буквами
  2. Возникают трудности с UPDATE и INSERT данных более 4 тыс символов.
  3. Возникают труднсти с autoincrement свойствами. Необходимы триггеры.