LINUX.ORG.RU
ФорумTalks

Хм я что-то не понимаю?


0

0

Я что - то не понимаю, но разве это нормально задавать студентам лабы по БД делать в оракле?



01:13:06 [----] men1:
Ты в Оракле никогда не программирвал?
01:13:30 [----] men2:
SQL? нет, не изучал этот язык
а что?
01:13:49 [----] men2:
зачем оракл?
ставь MySQL
01:13:55 [----] men1:
В таком случае ничего.
01:13:56 [----] men2:
или PostgresSQL
01:14:11 [----] men2:
оракл - отстой
01:14:13 [----] men1:
Я бы рад! Но лабы в MySql!
01:14:21 [----] men1:
D cvsckt d Jhfrkt
01:14:27 [----] men1:
В смыле в Оракле!
01:14:29 [----] men2:
а зачем тебе тогда оракл?
01:14:43 [----] men2:
в оракле?
какой дибил это придумал?
01:14:43 [----] men1:
Я бы и сам рад в MySql писать...
01:14:57 [----] men2:
так язык один SQL
01:15:01 [----] men2:
разница то?
01:15:12 [----] men2:
и кто придумал лабы в оракле?
01:15:14 [----] men1:
Какой дибил оставил нас без сервера! Прикинь как делать лабы без сервера?
01:15:21 [----] men2:
Этот, <X-men>?
01:15:26 [----] men1:
Ну там ваще PL\SQL
01:15:35 [----] men1:
<Y-women> наша....
01:15:48 [----] men2:
А в универе стоит оракел?
01:15:59 [----] men2:
че за дибилизм...
01:16:11 [----] men2:
чем MySql не устраивает?
01:16:31 [----] men1:
Стоит. Но кто ж в него ходит. И какая мне от этого радость? Я все равно все дома делаю.
01:16:46 [----] men1:
И забрать его нельзя.
01:16:51 [----] men2:
так. men1, можешь рассказать подробнее
01:17:01 [----] men2:
вам нужно написать что?
01:17:15 [----] men1:
5 лаб...
01:17:18 [----] men2:
на плскуль?
01:17:26 [----] men1:
Да.
01:17:53 [----] men2:
так. а почему нельзя на другом?
и где предлагается брать оракел студентам?
01:18:28 [----] men2:
я просто сейчас хочу это на ЛОР запостить, чтобы народ поржал 01:18:47 [----] men1:
Нигде. Студентам предлагается делать все в универе. У меня есть оракел, но там только клиент... ЛОР? Че за нах?

★★

ну, мы лабы под MSSQL делали - там тож своя приблуда TransactSQL. И ниче, сделали все. Думаю, оракл не проблема найти по знакомым. Точно как и MSSQL Server. Я сомневаюсь, что у вас лабораторные требуют использования специфических фич ораклового диалекта SQL. Поэтому тестируйте на MySQL и не выходите за рамки стандарта SQL-92.

01:14:11 [----] men2: оракл - отстой - повеселил, спасибо

JFreeM ★★★☆
()

У нас тоже оракел был. Благо, я работал в универе в то время, как раз рядом с этим оракелом :)

Zmacs
()

Буквально вчера сдал лабу по oracle и получил зачет. Прокатили скрипты для создания базы, управления и чего там еще

JB ★★★★★
()
Ответ на: комментарий от anonymous

> Это в каких же?

postgresql? его даже называют "почти-oracle"

JB ★★★★★
()
Ответ на: комментарий от JFreeM

>Я сомневаюсь, что у вас лабораторные требуют использования специфических фич ораклового диалекта SQL. Поэтому тестируйте на MySQL и не выходите за рамки стандарта SQL-92.

Ну все-таки оракл штука ОЧЕНЬ своеобразная - если query не выдает данных, идет exception и т. д. А еще на PL/SQL веб-интерфейс делают...

anonymous
()
Ответ на: комментарий от anonymous

"если query не выдает данных, идет exception и т. д." лишь в том случае, если запрос выполняется в Pl/Sql блоке...

просто запрос...
$./sqlplus
SQL> select * from dual where dummy <> 'X';

no rows selected

а вот не просто запрос...
SQL> declare
2 i varchar2(10);
3 begin
4 select dummy into i from dual
5 where dummy <> 'X';
6 end;
7 /
declare
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 4

"А еще на PL/SQL веб-интерфейс делают" - это называется PSP (PL/SQL Server Pages). В поставке оракла идёт модифицированный апач, с модулем mod_plsql, который преобразует HTTP запросы вида http://server/pls/<имя процедуры>?param=value[&#182;m=value] в вызов хранимого кода на стороне сервера (процедуры, функции и процедуры/функции пакетов) где запросы обрабатываются и с помощью встроенного пакета htp генерируется ответ. В общем случае это вариант CGI.

"Ну все-таки оракл штука ОЧЕНЬ своеобразная" - настолько своеобразная, что слов нет. Единственный проприетарный продукт за который я бы отдал деньги не глядя.

dlomin
()
Ответ на: комментарий от dlomin

>Единственный проприетарный продукт за который я бы отдал деньги не глядя.

А у меня коллега учит в универе оракл. Матерится жутко.

anonymous
()

Мы тоже делали лабы в оракле и модемщиками были. И ничего, никто не жаловался и проблем с доставанием серверной части не испытывали. Какие-то странные студенты пошли.

anonymous
()
Ответ на: комментарий от anonymous

Чем же ему не понравился PL/SQL?
Он с ним работал профессионально?

По-конкретнее пожалуста, а-то как-то не серьёзно...вот друг который учится....матерится...

авторитет мля, какие конкретно претензии к языку?

dlomin
()
Ответ на: комментарий от dlomin

> авторитет мля, какие конкретно претензии к языку?

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

Жутко мешает проклятие любой коммерческой системы: груз обратной совместимости. Например, нужно обладать очень богатым воображением, чтобы догадаться, что привилегии на хранимые процедуры надо смотреть в представлении user_tab_privs. Весьма оригинально работают некоторые функции, например, translate. Еще оригинальнее поведение синонимов, работающих, через связки, предсказать привилегии на такие объекты без ручки и бумаги весьма затруднительно. Это серьезная дыра в безопасности. Еще хуже, что сквозь связки невозможно сделать выборку поля типа LOB. Поведение NULL -- вообще отдельная песня, когда в некоторых случаях просто неочевидно, как завершится вычисление определенного выражения. В наших узких кругах до сих пор выясняется, по какой схеме в PL/SQL вычисляются логические выражения. Ибо большинство сходится во мнении, что по короткой, но один разработчик зуб дает, что видел, как для полей типов эта схема оказывается полной. Еще убило полное отсутствие стандартных параметризованных представлений, а рекомендуемые способы реализации таковых основаны либо на черезжопных решениях типа пакетных переменных, либо серьезной эскалации прав.

Очень весело работать с материализованными представлениями и автономными транзакциями, когда по совершенно непонятным причинам основная транзакция отваливается с ошибкой распределенной транзакции или транзакционным локом.

Да, еще очень радует отсутствие возможности из подпрограммы в пакете вызвать глобальную подпрограмму с таким же именем. А если все-таки нечаянно вызвать из подпрограммы саму себя, то сервак проваливается в бесконечную рекурсию, результатом которой становится не банальное исключение по переполнению стека, а полный даун системы, после которой сервер приходится полностью рестартовать.

Это вот так сумбурно, что смог сходу вспомнить из богатой жизненной практики. А в остальном, если не хотеть странного и рассматривать PL/SQL исключительно как язык для написания триггеров, то выглядит он весьма недурственно. Мы его даже местами используем как инструментальный.

eugine_kosenko ★★★
()
Ответ на: комментарий от anonymous

Видимо, я живу не в России. А жаль.

Teak ★★★★★
()

Ну, оракел так оракел, в чём трабла? Домой его тащить для этого вовсе не обязательно. Когда я в децтве сдавал лабы по ядрёной физике, нам сэмплы радиоактивных тоже негде было взять, никто из-за этого не расстраивался...

bugmaker ★★★★☆
()
Ответ на: комментарий от anonymous

анонимус готов предоставить мне такое в моем городе ?

Amenich
()
Ответ на: комментарий от magesor

есть такие цены на траф в москве. редко но есть. причём не режут. мы вот например с февраля планируем ваааще не шейпить первые 20 гигов трафика, даром что 9 из 10 анлимщиков их всё равно не выкачивают...

А по поводу оракла - это, как говорится: women are not much but this is the best other sex we have...

найдите лучше, а на оболчку к берклевским хешам вообще пальцем тыкать не надо, детей плохому учить - а то потом плодятся пхп-говнопрограммеры которые на знают даже как в select'e выборку по двум условиям сразу сделать (то есть про существование AND не знают)

Оракл изучают чтобы показать студентам НАСКОЛЬКО МОЩНЫМИ бывают базы данных и что вьюшка на 5 печатных страниц - это не так уж и страшно...

А те кому страшно пусть идут лучше асфальт укладывать...

vahvarh ★★★
()

>У меня есть оракел, но там только клиент... ЛОР? Че за нах?
Oracle XE(бесплатный, вместе с готовой базой) есть даже для Debian. Возможностей для лабораторок достаточно.

sco-killer
()
Ответ на: комментарий от dlomin

>"Ну все-таки оракл штука ОЧЕНЬ своеобразная" - настолько своеобразная, что слов нет. Единственный проприетарный продукт за который я бы отдал деньги не глядя.
+1
P.S. Сервера и клиенты под большинство распространенных платформ - за это их можно уважать, несмотря на закрытость.

sco-killer
()
Ответ на: комментарий от wieker

> анлим 8 КБАЙТ / 64КБИТ - 40$

CD за сутки слить можно. Или студент нынче привередливый пошел, нужно чтоб всё на подножном корме было? У нас в институте были лабы на оборудовании, которое стоило немерянных мегабаксов, вообще нереально дома сделать, и чего теперь?

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от wieker

> но не у всех он есть...

Скиньтесь и купите пива тому, у кого есть. Блин, люди меняются, даже попросить скачать (на анлиме!) уже не могут.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от sco-killer

> Меньше 200М, даже по диалапу слить можно.

Тем более. Хотя я когда-то и целиком CD лил на ночном диалапе. По расписанию дозвон, отключение. Неделя-две и CD скачан. И обновления с работы таскал, пока инет не провел после переезда. А тут, блин, проблема --- скачать 200М.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

Сейчас халявный ночной дайлап отменили везде.

dn2010 ★★★★★
()
Ответ на: комментарий от sco-killer

> +1
> P.S. Сервера и клиенты под большинство распространенных платформ - за это их можно уважать, несмотря на закрытость.

Да куда уж там! На оптеронах уже суперкомпьютеры вовсю строят, не говоря уж о простых фермах - а этот мегапродукт всяко древнюю компатиблю требует. Хотя это и не перетензия вовсе, учитывая факт полного незнания, к примеру, вендузяшными кодерами целых типов длиннее 32 бит.

Gharik
()
Ответ на: комментарий от eugine_kosenko

>Ну, в PL/SQL больше всего убивают недоделанные типы.

Имеются в виду объектные типы? Да, пробовал использовать в продакшене, было очень геморойно. Но тем не менее оъектные типы есть, и для некоторых задач они годятся...

> А если все-таки нечаянно вызвать из подпрограммы саму себя, то сервак проваливается в бесконечную рекурсию, результатом которой становится не банальное исключение по переполнению стека, а полный даун системы, после которой сервер приходится полностью рестартовать.

Вот на домашней системе тест сделал...

SQL>create or replace package body test is 2 procedure recurs is 3 begin 4 null; 5 end; 6 end; 7 / Package created.

SQL>create or replace package body test is 2 procedure recurs is 3 begin 4 test.recurs; 5 end; 6 end; 7 / Package body created.

SQL> exec test.recurs ERROR: ORA-03114: not connected to ORACLE

BEGIN test.recurs; END;

* ERROR at line 1: ORA-03113: end-of-file on communication channel

SQL>

Всё, сессия отвалилась. Но экземпляр жив... Всё зависит от версии оракла и наложенного патча. Вот такая дома у меня система... SQL> conn ais/ais Connected. SQL> select * from sys.V_$VERSION;

BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod PL/SQL Release 10.1.0.2.0 - Production CORE 10.1.0.2.0 Production TNS for Linux: Version 10.1.0.2.0 - Production NLSRTL Version 10.1.0.2.0 - Production

>Например, нужно обладать очень богатым воображением, чтобы догадаться, что привилегии на хранимые процедуры надо смотреть в представлении user_tab_privs >Поведение NULL -- вообще отдельная песня Читайте документацию, учитесь в авторизованных центрах, вам всё расскажут...

>Это серьезная дыра в безопасности Оракул вообще одна большая дыра, это верно...

>Еще убило полное отсутствие стандартных параметризованных представлений Есть много способов сделать параметризованные представления и я в своей работе использую несколько вариантов. У других и такого нет...

>Очень весело работать с материализованными представлениями и автономными транзакциями, когда по совершенно непонятным причинам основная транзакция отваливается с ошибкой распределенной транзакции или транзакционным локом.

Причины для всего есть

Просто я хочу сказать что несмотря на все недостатки и глюки, Оракул самая лучшая проприетарная реляционная субд.

dlomin
()
Ответ на: комментарий от watashiwa_daredeska

>А тут, блин, проблема --- скачать 200М.
Еще и в институте, с нормальным каналом. В мою бытность студентом никакого инета, UUCP+FIDO+модем 9600 - все равно, что сейчас - 10мбит внешний канал :-)

sco-killer
()
Ответ на: комментарий от eugine_kosenko

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

Ну и выдержка из документации...это должно снять все споры...

Short-Circuit Evaluation

When evaluating a logical expression, PL/SQL uses short-circuit evaluation. That is, PL/SQL stops evaluating the expression as soon as the result can be determined. This lets you write expressions that might otherwise cause an error. Consider the following OR expression:
DECLARE
on_hand INTEGER := 0;
on_order INTEGER := 100;
BEGIN
-- Does not cause divide-by-zero error; evaluation stops after 1st expr.
IF (on_hand = 0) OR ((on_order / on_hand) < 5) THEN
dbms_output.put_line('There are no more widgets left!');
END IF;
END;
/

When the value of on_hand is zero, the left operand yields TRUE, so PL/SQL does not evaluate the right operand. If PL/SQL evaluated both operands before applying the OR operator, the right operand would cause a division by zero error.

dlomin
()
Ответ на: комментарий от magesor

зайди на сайты корбины и центела (это два крупнейших московских провайдера для частных лиц после стрима) - у первой 3 мегабита стоит 900 рублей, у второго - 3.5 стоит 920, никаких явных и неявных ограничений потребления трафика нет

anonymous
()
Ответ на: комментарий от dlomin

> Short-Circuit Evaluation

Это все хорошо и согласуется с общими догматами. Однако, когда я вчера писал свой плач души, закралась мне в голову шальная мысль -- а что будет, если одно из подвыражений имеет значение NULL? Ну, например, в выражении

A = NULL AND B = 5

A = NULL AND B = 5

Будет ли в этом случае вычислено второе выражение? Сейчас под рукой нет Оракла, попробую в понедельник проверить...

По идее, тут тоже должна сработать короткая схема в обоих случаях, потому что значение выражения становится NULL уже после первого подвыражения.

Не исключаю, что наш товарищ, "видевший духов", столкнулся с каким-то аналогичным природным явлением...

eugine_kosenko ★★★
()
Ответ на: комментарий от dlomin

> Вот на домашней системе тест сделал...

Зачем пакет два раза создавать?

> Всё зависит от версии оракла и наложенного патча.

Возможно, в десятке полечили. В понедельник проверю. У нас заказчик только в этом году на девятку переполз.

> Читайте документацию, учитесь в авторизованных центрах, вам всё расскажут...

Угу, расскажут. По принципу "да, есть такой баг, в следующей версии исправлено". :-)

> У других и такого нет...

Отучаемся говорить за других. Как минимум, во вражеских продуктах таковые имеются, хотя и не по стандарту. И потом, речь сейчас не о недостатках других, а о том, чем может не устраивать PL/SQL.

> Просто я хочу сказать что несмотря на все недостатки и глюки, Оракул самая лучшая проприетарная реляционная субд.

Расскажите об этом фонатегам DB2 и Yukon.

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

> A = NULL AND B = 5

Так делать нельзя (A = NULL), простите меня, но разработчик на Оракле в течение 3-х месяцев запоминает синтаксис и потом не допускает таких примитивных ошибок. Искренне надеюсь что это всё же опечатка, я серьёзно.

Делать надо так...

A IS NULL OR B = 5
или
A IS NOT NULL OR B = 5

а вот опять документация....её нужно читать, читайте Тома Кайта, там всё написано.

Опять же только в оракле идеологически правильно реализованны операции с NULL. Это вам (не к ночи будет помянут) MSSQL какой-нибудь....

Logical Operators
The logical operators AND, OR, and NOT follow the tri-state logic shown in Table 2-2. AND and OR are binary operators; NOT is a unary operator.

Table 2-2 Logic Truth Table
x y x AND y x OR y NOT x
TRUE TRUE TRUE TRUE FALSE
TRUE FALSE FALSE TRUE FALSE
TRUE NULL NULL TRUE FALSE
FALSE TRUE FALSE TRUE TRUE
FALSE FALSE FALSE FALSE TRUE
FALSE NULL FALSE NULL TRUE
NULL TRUE NULL TRUE NULL
NULL FALSE FALSE NULL NULL
NULL NULL NULL NULL NULL

As the truth table shows, AND returns TRUE only if both its operands are true. On the other hand, OR returns TRUE if either of its operands is true. NOT returns the opposite value (logical negation) of its operand. For example, NOT TRUE returns FALSE.
NOT NULL returns NULL, because nulls are indeterminate. Be careful to avoid unexpected results in expressions involving nulls; see "Handling Null Values in Comparisons and Conditional Statements".

dlomin
()
Ответ на: комментарий от eugine_kosenko

>Зачем пакет два раза создавать?

Копи-пасте из терминала....

dlomin
()
Ответ на: комментарий от eugine_kosenko

>Расскажите об этом фонатегам DB2 и Yukon.

Однако рассказывать не буду, а отправлю интересующихся на sql.ru
в форумы, в форум "Сравнение СУБД" и почитать топик "Провал операции Yukon". Очень познавательно ;-)

dlomin
()
Ответ на: комментарий от dlomin

Блин форматирование лоровское...таблицу повторю...

x     y     x AND y  x OR y   NOT x 
TRUE  TRUE  TRUE     TRUE     FALSE 
TRUE  FALSE FALSE    TRUE     FALSE 
TRUE  NULL  NULL     TRUE     FALSE 
FALSE TRUE  FALSE    TRUE     TRUE 
FALSE FALSE FALSE    FALSE    TRUE 
FALSE NULL  FALSE    NULL     TRUE 
NULL  TRUE  NULL     TRUE     NULL 
NULL  FALSE FALSE    NULL     NULL 
NULL  NULL  NULL     NULL     NULL 

>закралась мне в голову шальная мысль -- а что будет, если одно из подвыражений имеет значение NULL

и примерчик
"afiedit.sql" 11L, 156C записано

  1  declare
  2   a number;
  3   b number := 10;
  4  begin
  5   if a = null or b = 5 then
  6    dbms_output.put_line('TRUE');
  7   else
  8    dbms_output.put_line('FALSE');
  9   end if;
 10* end;
SQL> /
FALSE

PL/SQL procedure successfully completed.


Всё согласно таблице...

dlomin
()
Ответ на: комментарий от eugine_kosenko

>Отучаемся говорить за других

Евгений, не за других, а про других :-))

dlomin
()
Ответ на: комментарий от dlomin

> Всё согласно таблице...

Вопрос не в этом. Вопрос в том, будет ли вычисляться второе выражение, если первое -- NULL? Допустим, вот так:

будет ли возникать ошибка при вычислении следующих выражений

a = null or a.count = 0

a != null and a.count > 0

где a -- неинициализированная коллекция?

eugine_kosenko ★★★
()
Ответ на: комментарий от dlomin

> Так делать нельзя (A = NULL), простите меня, но разработчик на Оракле в течение 3-х месяцев запоминает синтаксис и потом не допускает таких примитивных ошибок.

Ну хорошо, а если запишем как "A = ''", то Вам существенно полегчает? Давайте не будем друг друга лечить на предмет "правильно" или "неправильно". Речь идет о принципе, а NULL в правой части сравнения может возникнуть любым, самым замысловатым образом. Иногда таким, что даже трехмесячный разработчик не разберет. Я ведь не зря намекал на поведение функции translate.

> а вот опять документация....её нужно читать, читайте Тома Кайта, там всё написано.

Давайте, Вы все-таки не будете рассказывать мне, что делать, а я не буду мучать Вас вопросами о том, почему поведение Оракла зависит от правильно накатанных патчей и прочих фаз Луны, и в какой документации читать о том, в какой версии сервер зависнет, в какой отвалит сессию, и почему нельзя было обойтись обыкновенным исключением. Хорошо?

> Опять же только в оракле идеологически правильно реализованны операции с NULL. Это вам (не к ночи будет помянут) MSSQL какой-нибудь....

Угу, а теперь расскажите мне, почему идеологически правильным считается при значении NULL в условии оператора ветвления переходить к ветви ELSE, а не THEN, либо (что наиболее верно с точки зрения тернарной логики) вообще игнорировать обе ветви оператора. И почему идеологически правильно приравнивать пустое значение и строку нулевой длины.

И еще мне интересно, что если Вам со ссылкой на камасутру расскажут, что сексом идеологически правильно заниматься стоя и в гамаке, то Вы так и будете делать?

> Logical Operators

А теперь покажите мне в этой таблице, по какой схеме (полной или короткой) вычисляются логические выражения с NULL?

eugine_kosenko ★★★
()
Ответ на: комментарий от dlomin

> Так делать нельзя (A = NULL), простите меня, но разработчик на Оракле в течение 3-х месяцев запоминает синтаксис и потом не допускает таких примитивных ошибок. Искренне надеюсь что это всё же опечатка, я серьёзно.

Кстати, к вопросу об идеологии. Ошибкой уместно называть то, что либо не компилируется либо заканчивается исключением. Так что, с этой позиции это не ошибка и не опечатка. Это фича. Даже если она позволяет разработчику прострелить себе ногу. И, как всякая фича, она должна быть корректно задокументирована.

Покажите мне место в документации, где написано, что это ошибка или опечатка, и что так делать нельзя. В противном случае я искренне надеюсь, что отсутствие приписки IMHO в конце сей тирады -- это Ваша опечатка, я серьезно.

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

>А теперь покажите мне в этой таблице, по какой схеме (полной или короткой) вычисляются логические выражения с NULL?

В документации написано по короткой...

>Вопрос не в этом. Вопрос в том, будет ли вычисляться второе выражение, если первое -- NULL? Допустим, вот так: будет ли возникать ошибка при вычислении следующих выражений a = null or a.count = 0 a != null and a.count > 0

ещё раз повторю, проверка на NULL производится операторами IS NULL | IS NOT NULL

вот такое написание выражения a = null or a.count = 0 имеет undefined поведение от версии к версии и от патча к патчу...

Правильный пример...

"afiedit.sql" 11L, 190C записано

1 declare 2 type t is table of varchar2(10) index by binary_integer; 3 a t; 4 begin 5 if a is NULL or a.count = 0 then 6 dbms_output.put_line('TRUE'); 7 else 8 dbms_output.put_line('FALSE'); 9 end if; 10* end; SQL> / TRUE

PL/SQL procedure successfully completed.

а теперь вот так, неправильный...

"afiedit.sql" 11L, 189C записано

1 declare 2 type t is table of varchar2(10) index by binary_integer; 3 a t; 4 begin 5 if a = NULL or a.count = 0 then 6 dbms_output.put_line('TRUE'); 7 else 8 dbms_output.put_line('FALSE'); 9 end if; 10* end; SQL> / if a = NULL or a.count = 0 then * ERROR at line 5: ORA-06550: line 5, column 6: PLS-00306: wrong number or types of arguments in call to '=' ORA-06550: line 5, column 1: PL/SQL: Statement ignored

dlomin
()
Ответ на: комментарий от eugine_kosenko

Форматирование....

>А теперь покажите мне в этой таблице, по какой схеме (полной или короткой) вычисляются логические выражения с NULL?

В документации написано по короткой...

>Вопрос не в этом. Вопрос в том, будет ли вычисляться второе выражение, если первое -- NULL? Допустим, вот так: будет ли возникать ошибка при вычислении следующих выражений 
a = null or a.count = 0 
a != null and a.count > 0

ещё раз повторю, проверка на NULL производится операторами IS NULL | IS NOT NULL

вот такое написание выражения a = null or a.count = 0 имеет undefined поведение от версии к версии и от патча к патчу...

Правильный пример...

"afiedit.sql" 11L, 190C записано

  1  declare
  2  type t is table of varchar2(10) index by binary_integer;
  3  a t;
  4  begin
  5  if a is NULL or a.count = 0 then
  6  dbms_output.put_line('TRUE');
  7  else
  8  dbms_output.put_line('FALSE');
  9  end if;
 10* end;
SQL> /
TRUE

PL/SQL procedure successfully completed.

а теперь вот так, неправильный...

"afiedit.sql" 11L, 189C записано

  1  declare
  2  type t is table of varchar2(10) index by binary_integer;
  3  a t;
  4  begin
  5  if a = NULL or a.count = 0 then
  6  dbms_output.put_line('TRUE');
  7  else
  8  dbms_output.put_line('FALSE');
  9  end if;
 10* end;
SQL> /
if a = NULL or a.count = 0 then
     *
ERROR at line 5:
ORA-06550: line 5, column 6:
PLS-00306: wrong number or types of arguments in call to '='
ORA-06550: line 5, column 1:
PL/SQL: Statement ignored



dlomin
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.