Объяснить суть запроса SQL.
Есть запрос:
W2.city, W2.temp_lo AS low, W2.temp_hi AS high
FROM weather W1, weather W2
WHERE W1.temp_lo < W2.temp_lo
AND W1.temp_hi > W2.temp_hi;
Результатом запроса будет такая выборка:
Что с чем сравнивается и какой вообще у запроса смысл?
В Oracle PL\SQL необходимо выполнить создание двух таблиц, при этом, если одна из таблиц не создалась, то откатить создание другой. Как это можно сделать без написания функции? То есть, выполнить только блок BEGIN END, в котором будут два CREATE TABLE и обработчик исключений, который и сделает rollback? Неудобно, что создание таблицы необходимы записывать как одну строку(execute immediate ведь не умеет работать с многострочными командами?). Какие ещё варианты реализации этого задания есть или чем можно заменить execute immediate, чтобы он понял многострочную команду?
Ни как!!!
Дело в том,что таблица-таблице розьн(таблица-это есть переменная)
Надо создавать функцию для проверки, что первая таблица создана и подходит к вашим условиям.
Мне не нужно, чтобы создание таблиц выполнялось из php скрипта или командной строки. Мне просто нужен блок кода с одним обработчиком эксепшонов, который я мог бы вставить в тектовое поле веб интерфейса и выполнить его, как и любой другой код, не обёрнутый в функцию.
Можно это на английском.
В вашей трех вопросах разные требования.
И еще Ваше:
Хай на Русском сайте это лишнее. (Замените на Hello или Хелло)
Я хоть и иностранец, но знаю, что такое 1941-1945г для USSR.
А фото не при делах.
В вашей трех вопросах разные требования.
[offtop]
А, это снова вы. А я вас помню...Было это года два назад. Вы тогда ещё писали, какой коднет ужасный и как тут недобро к новичкам относятся и обещались покинуть сию обитель и свалить обратно в свой уютный ГДР.
[/offtop]
Не отрицаю — возможно, в вопросе про Oracle требования и странные и неоднородные...но это оттого, что я не знаю, как мне было бы удобнее этим пользоваться, хотя имею представление о нескольких направлениях решения моей задачи. Мне не хочется писать длинные запросы в одну строчку и создавать кучу функций на каждый чих. И все действия мне придётся выполнять из веб интерфейса, где хотелось бы просто выделить необходимый блок и выполнить(если такое возможно, конечно, для блоков begin end).
А, это снова вы. А я вас помню...Было это года два назад. Вы тогда ещё писали, какой коднет ужасный и как тут недобро к новичкам относятся и обещались покинуть сию обитель и свалить обратно в свой уютный ГДР.
[/offtop]
Не далекий Вы человек, раз решили разгласить переписку из 'Личной Почты'.
Я не писал, что свалию обратно в свой уютный ГДР.(у меня есть оригиналы переписки. Это было 15 июня 2012 года и 19 июня 2012 года)
Ладно проехали.
Во-первых, DDL (create, alter, drop) выражения _НЕ ОТКАТЫВАЮТСЯ_. Во всяком случае в Oracle (после каждого DDL идет автокомит). Возможно это предусмотрено в MS SQL, но это уже другая история.
Во-вторых, рассмотрите вариант создания ваших таблиц через CREATE SCHEMA. Это, конечно, не совсем то, что вы спрашиваете в вопросе, но может и подойдет вам. И опять же см. пункт 1.
В-третьих, есть распространенная пркатика работы с DDL (в Oracle). Перед конструкцией CREATE использовать конструкцию DROP.
Например
CREATE TABLE table1 ...
DROP ...
CREATE ...
Про ваш запрос в первом посте... Во-первых, таблицы city нет, есть таблица weather. Видимо вы ошиблись при написании.
1. Берется декартово произведением всех записей двух таблиц. Думаю, не надо объяснять что такое декартово произведение.
2. Для каждой пары (из дек. произв.) проверяются указанные условия.
3. В результат выборки попадают, только те, которые удовлетворяют указанным условиям, то есть будут просто две пары городов с подходящим значениями.
Вывод, ваш запрос не имеет какого-либо смысла. Если вы таким образом пытались найти максимальную или минимаульную температуру, то это в корне неверно.
Спасибо за разъяснения про Oracle, надо будет попробовать ещё раз с drop table, мне казалось, что выполнение блока завершается при попытке удалить несуществующую таблицу.
И потом. Не советовал бы изучать ORACLE по мануалам PostgreSQL'я. SQL, в многих, вещах у них похож (так как стандарт), но всякие "фенечки" в корне разные. И у ORACLE таких фенечек больше будет. Есть правда такая штука как EnterpriseDB - это коммерческое направление постгреса. Для него поддерживается порт пакеджей, и вполне приличный порт.
По смыслу - ну это набор "первичных" записей с некоторым условием для, например...
1. Если отсортировать указанные выборку в прямом порядке по W1.lo (ORDER BY W1.lo), то в первой записи должны получить минимальную температуру.
2. Если отсортировать указанные выборку в обратном порядке по W1.lo (ORDER BY W1.lo DESC), то в первой записи должны получить температуру максимальную по минимальной границе.
и т.д.
Я не учу postgres по мануалам oracle. :) Это просто так совпало, что в данный момент занимаюсь и тем, и другим, вот и спросил сразу обо всём.
Я перечитал мануал, там вообще-то автор не стремился найти макс. или мин. температуру... речь просто об некотором диапазоне.
На мой взгляд пример не очень удачный, да еще и автоперевод недоправленный.