<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>С кодом по жизни &#187; Базы данных</title>
	<atom:link href="http://mphome.dp.ua/topics/bazy-dannyx/feed/" rel="self" type="application/rss+xml" />
	<link>http://mphome.dp.ua</link>
	<description>О разработке программного обеспечения, и не только.</description>
	<lastBuildDate>Wed, 03 Aug 2011 12:43:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Новый подход к написанию резюме</title>
		<link>http://mphome.dp.ua/novyj-podxod-k-napisaniyu-rezyume/</link>
		<comments>http://mphome.dp.ua/novyj-podxod-k-napisaniyu-rezyume/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 13:32:27 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://mphome.dp.ua/novyj-podxod-k-napisaniyu-rezyume/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><img src="http://mphome.dp.ua/wp-content/uploads/HLIC/82405dc9c398e5c639ddf1eca0578f68.jpg" width="500" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/novyj-podxod-k-napisaniyu-rezyume/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>COALESCE &#8220;умнее&#8221; чем NVL.</title>
		<link>http://mphome.dp.ua/coalesce-umnee-chem-nvl/</link>
		<comments>http://mphome.dp.ua/coalesce-umnee-chem-nvl/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 09:20:18 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://mphome.dp.ua/coalesce-umnee-chem-nvl/</guid>
		<description><![CDATA[Век живи &#8212; век учись. NVL вычисляет второй аргумент, даже если если первый аргумент не NULL. NVL2 поступает также:&#160; “вычисляет” оба аргумента, хотя по идее должна вычислять только один. Подробности и детали: Short-circuit Evaluations &#8212; moving away from NVL. Конечно для случаев NVL(Field, DefaultValue) или NVL2(Field, NotNullDefaultValue, NullDefaultValue) это ничего не даст, но если для [...]]]></description>
			<content:encoded><![CDATA[<p>Век живи &#8212; век учись. NVL вычисляет второй аргумент, даже если если первый аргумент не NULL. NVL2 поступает также:&#160; “вычисляет” оба аргумента, хотя по идее должна вычислять только один. Подробности и детали: <a href="http://triangle-circle-square.blogspot.com/2010/02/short-circuit-evaluations-moving-away.html">Short-circuit Evaluations &#8212; moving away from NVL</a>.</p>
<p>Конечно для случаев NVL(Field, DefaultValue) или NVL2(Field, NotNullDefaultValue, NullDefaultValue) это ничего не даст, но если для расчета значения по умолчанию используется функция (и еще через одно место написанная), то могут быть варианты.</p>
<p>В Oracle “умными” оказались только DECODE, CASE и COALESCE.</p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/coalesce-umnee-chem-nvl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle recycle bin</title>
		<link>http://mphome.dp.ua/oracle-recycle-bin/</link>
		<comments>http://mphome.dp.ua/oracle-recycle-bin/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 10:11:45 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.mphome.dp.ua/oracle-recycle-bin/</guid>
		<description><![CDATA[В Oracle 10 появилась новая фича Recycle Bin, когда вы удаляете таблицу – она вначале попадает в корзину (нафига это надо?!). Самое дурацкое &#8212; что таблица просто переименовывается и естественно занимает тоже место что и до исполнения DROP TABLE. Причем ложится туда вместе с индексами. Отключить навсегда: ALTER SYSTEM SET &#34;recyclebin&#34;=OFF SCOPE = BOTH; Почистить [...]]]></description>
			<content:encoded><![CDATA[<p>В Oracle 10 появилась новая фича Recycle Bin, когда вы удаляете таблицу – она вначале попадает в корзину (нафига это надо?!). Самое дурацкое &#8212; что таблица просто переименовывается и естественно занимает тоже место что и до исполнения DROP TABLE. Причем ложится туда вместе с индексами.</p>
<p>Отключить навсегда:</p>
<p><strong>ALTER SYSTEM SET &quot;recyclebin&quot;=OFF SCOPE = BOTH;</strong></p>
<p>Почистить для всех схем:</p>
<p><strong>PURGE dba_recyclebin;</strong></p>
<p>Зачем эта возможность добавлена, я так и не понял.</p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/oracle-recycle-bin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Programming Macroprocessor &#8211; зачем он нужен??</title>
		<link>http://mphome.dp.ua/sql-programming-macroprocessor-zachem-on-nuzhen/</link>
		<comments>http://mphome.dp.ua/sql-programming-macroprocessor-zachem-on-nuzhen/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 14:34:03 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Базы данных]]></category>

		<guid isPermaLink="false">http://www.mphome.dp.ua/sql-programming-macroprocessor-zachem-on-nuzhen/</guid>
		<description><![CDATA[Serguei_Tarassov опубликовал заметку SPM (SQL Programming Macroprocessor). Создайте свой проблемный язык &#8212; 2. С заголовком согласен на 100% – еще один язык над SQL – это создание проблем себе самому, хотя подозреваю под словами “проблемный язык” имелся ввиду язык для решения проблем. Если посмотреть на разницу в коде между sqm и sql – то 90% [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://arbinada.com/main/blog/2">Serguei_Tarassov</a> опубликовал заметку <a title="http://arbinada.com/main/node/572" href="http://arbinada.com/main/node/572">SPM (SQL Programming Macroprocessor). Создайте свой проблемный язык &#8212; 2.</a> С заголовком согласен на 100% – еще один язык над SQL – это создание проблем себе самому, хотя подозреваю под словами “проблемный язык” имелся ввиду язык для решения проблем.</p>
<p>Если посмотреть на разницу в коде между sqm и sql – то 90% кода совпадает. Зачем тогда городить огород из еще одного языка?</p>
<p>Только что бы вместо такого кода</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #993333; font-weight: bold;">EXISTS</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> sys<span style="color: #66cc66;">.</span>objects <span style="color: #993333; font-weight: bold;">WHERE</span> object_id <span style="color: #66cc66;">=</span> object_id<span style="color: #66cc66;">&#40;</span>N<span style="color: #ff0000;">'dbo.sales'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> objectproperty<span style="color: #66cc66;">&#40;</span>object_id<span style="color: #66cc66;">,</span> N<span style="color: #ff0000;">'IsUserTable'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">TABLE</span> dbo<span style="color: #66cc66;">.</span>sales
<span style="color: #993333; font-weight: bold;">GO</span>
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> dbo<span style="color: #66cc66;">.</span>sales</pre></div></div>

<p>писать одну команду DeclareTable(dbo.sales). Тем более что приведенные четыре строчки обычного копируются из ранее написанной процедуры и делается поиск и замена на нужное название.</p>
<p>Я соглашусь с использованием промежуточного языка для определения структур данных – это действительно удобно. Мы например просто определили формат для описания объектов в xml, и написали аж три xsl transformation stylesheets для oracle, mssql и mysql, это удобно не только для генерации кода, но и для поиска расхождений в базе и в модели.</p>
<p>Но для процедур? Как по мне это излишество. И ничего кроме десяти сэкономленных строк кода не даст.</p>
<p>Возможно это только начало. Примеры даны только для mssql, если бы код генерировался для нескольких баз данных – например для oracle и mssql – я бы обрадовался такому подходу. Кто-то решал это? Я сдался :) из-за oracle collections, оператора for x IN (…), exceptions и аналитических функций. (Глупо ориентироваться на самое слабое звено и использовать только те возможности которые есть у всех баз данных.)</p>
<p>Хотя справедливости ради скажу что и у нас процедурный код на Oracle “препроцессится” – точнее из разрозненных процедур генерируется код для заголовка пакета (интерфейс) и тело. Правда никакого макро-языка нет, а делает всё один простой скрипт на перле – которому дается имя каталога с процедурами и один создает интерфейс и код пакета.</p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/sql-programming-macroprocessor-zachem-on-nuzhen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сюрпризы Oracle &#8211; foreign keys and indexes</title>
		<link>http://mphome.dp.ua/syurprizy-oracle-foreign-keys-and-indexes/</link>
		<comments>http://mphome.dp.ua/syurprizy-oracle-foreign-keys-and-indexes/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 16:12:31 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Базы данных]]></category>

		<guid isPermaLink="false">http://www.mphome.dp.ua/syurprizy-oracle-foreign-keys-and-indexes/</guid>
		<description><![CDATA[Oracle 10 не перестает удивлять. Я так и не понял как можно было загрузить дамп в котором в дочерней таблице были references на несуществующие записи в master таблице, при том что после загрузки данных он спокойно создал и соотвествующие constraints и индексы. Deferrable constraints нигде нет. Да и не пользовали никогда. Вообщем – случилось и [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle 10 не перестает удивлять. Я так и не понял как можно было загрузить дамп в котором в дочерней таблице были references на несуществующие записи в master таблице, при том что после загрузки данных он спокойно создал и соотвествующие constraints и индексы.</p>
<p>Deferrable constraints нигде нет. Да и не пользовали никогда. Вообщем – случилось и случилось.</p>
<p>Пришлось написать скрипт который ловит такие записи. Что с ними делать потом решать Вам. Все результаты сохраняются в таблице Exceptions.</p>
<p>&#160;</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">DECLARE</span>
&nbsp;
  QuantityTemp <span style="color: #993333; font-weight: bold;">NUMBER</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">23</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">BEGIN</span>
   <span style="color: #993333; font-weight: bold;">BEGIN</span> 
        <span style="color: #993333; font-weight: bold;">EXECUTE</span> IMMEDIATE <span style="color: #ff0000;">'DROP TABLE  EXCEPTIONS CASCADE CONSTRAINTS'</span>;
   EXCEPTION
        <span style="color: #993333; font-weight: bold;">WHEN</span> OTHERS <span style="color: #993333; font-weight: bold;">THEN</span>
          <span style="color: #993333; font-weight: bold;">NULL</span>;
   <span style="color: #993333; font-weight: bold;">END</span>;  
&nbsp;
   <span style="color: #993333; font-weight: bold;">BEGIN</span> 
        <span style="color: #993333; font-weight: bold;">EXECUTE</span> IMMEDIATE <span style="color: #ff0000;">'create table exceptions(row_id rowid, owner varchar2(30), table_name varchar2(30),  constraint varchar2(30))'</span>;
   EXCEPTION
        <span style="color: #993333; font-weight: bold;">WHEN</span> OTHERS <span style="color: #993333; font-weight: bold;">THEN</span>
          <span style="color: #993333; font-weight: bold;">NULL</span>;
   <span style="color: #993333; font-weight: bold;">END</span>;  
&nbsp;
   <span style="color: #993333; font-weight: bold;">FOR</span> X <span style="color: #993333; font-weight: bold;">IN</span> 
   <span style="color: #66cc66;">&#40;</span>
      <span style="color: #993333; font-weight: bold;">SELECT</span> Constraint_name<span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #993333; font-weight: bold;">FROM</span> user_constraints
   <span style="color: #66cc66;">&#41;</span>
   LOOP
      <span style="color: #993333; font-weight: bold;">EXECUTE</span> IMMEDIATE <span style="color: #ff0000;">'DELETE FROM Exceptions'</span>;
      <span style="color: #993333; font-weight: bold;">BEGIN</span>
        <span style="color: #993333; font-weight: bold;">EXECUTE</span> IMMEDIATE <span style="color: #ff0000;">'ALTER TABLE '</span> <span style="color: #66cc66;">||</span> x<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #66cc66;">||</span>  <span style="color: #ff0000;">' MODIFY CONSTRAINT '</span> <span style="color: #66cc66;">||</span> x<span style="color: #66cc66;">.</span>Constraint_name <span style="color: #66cc66;">||</span> <span style="color: #ff0000;">' VALIDATE EXCEPTIONS INTO EXCEPTIONS '</span>;
      EXCEPTION
         <span style="color: #993333; font-weight: bold;">WHEN</span> OTHERS <span style="color: #993333; font-weight: bold;">THEN</span>
            <span style="color: #993333; font-weight: bold;">NULL</span>;
      <span style="color: #993333; font-weight: bold;">END</span>;  
&nbsp;
      <span style="color: #993333; font-weight: bold;">EXECUTE</span> IMMEDIATE <span style="color: #ff0000;">'SELECT Count(*)  FROM Exceptions '</span> <span style="color: #993333; font-weight: bold;">INTO</span> quantityTemp;
      <span style="color: #993333; font-weight: bold;">IF</span> QuantityTemp &amp;lt;&amp;gt; <span style="color: #cc66cc;">0</span> <span style="color: #993333; font-weight: bold;">THEN</span>
         dbms_output<span style="color: #66cc66;">.</span>put_line<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Table '</span> <span style="color: #66cc66;">||</span> x<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #66cc66;">||</span> <span style="color: #ff0000;">' CONSTRAINT: '</span> <span style="color: #66cc66;">||</span> x<span style="color: #66cc66;">.</span>Constraint_name <span style="color: #66cc66;">||</span> <span style="color: #ff0000;">' HAVE '</span> <span style="color: #66cc66;">||</span> QuantityTemp <span style="color: #66cc66;">||</span> <span style="color: #ff0000;">' problems. '</span><span style="color: #66cc66;">&#41;</span>;
      <span style="color: #993333; font-weight: bold;">END</span> <span style="color: #993333; font-weight: bold;">IF</span>;   
&nbsp;
   <span style="color: #993333; font-weight: bold;">END</span> LOOP;
<span style="color: #993333; font-weight: bold;">END</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/syurprizy-oracle-foreign-keys-and-indexes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сюрпризы oracle &#8211; обфускация пакетов</title>
		<link>http://mphome.dp.ua/syurprizy-oracle-obfuskaciya-paketov/</link>
		<comments>http://mphome.dp.ua/syurprizy-oracle-obfuskaciya-paketov/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 14:08:57 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[obfuscation]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[wrap]]></category>

		<guid isPermaLink="false">http://www.mphome.dp.ua/syurprizy-oracle-obfuskaciya-paketov/</guid>
		<description><![CDATA[Все нижеследующее справедливо для 9-ки (Oracle 9.2.x.x) Вероятно Вам приходилось обфусцировать plsql пакеты Oracle. Вероятно также что однажды утилита wrap не смогла это сделать. И Вы получили примерно такую ошибку: kgefec: fatal error 0 kgepop: no error frame to pop to for error 603 или другую ошибку подобную ошибку. И Вам приходилось рыскать в интернете [...]]]></description>
			<content:encoded><![CDATA[<p>Все нижеследующее справедливо для 9-ки (Oracle 9.2.x.x)</p>
<p>Вероятно Вам приходилось обфусцировать plsql пакеты Oracle. Вероятно также что однажды утилита wrap не смогла это сделать. И Вы получили примерно такую ошибку:</p>
<p><em>kgefec: fatal error 0      <br />kgepop: no error frame to pop to for error 603</em></p>
</p>
<p>или другую ошибку подобную ошибку. И Вам приходилось рыскать в интернете – что же это такое, почему оно происходит, как с этим бороться и т.д.</p>
<p>Вы разбивали пакет на несколько пакетов, включали опцию /3Gb, обфусцирование делали где памяти немерянно, и т.д.</p>
<p>Всё это делали и мы, пока не оказалось, что вначале достаточно убрать лидирущие пробелы в коде (не руками конечно) перед обсуцированием.</p>
<p>Оказалось размер текста (не кода) критичен для обфускации и простым удалением лидирующих пробелов можно уменьшить текст процентов на 10-15%</p>
<p>И о чудо, гигабайта RAM достаточно для обфускации пакета размером в мегабайт. (Почему при этом используется 2.5GB RAM для меня загадка)</p>
<p>К счастью wrap в десятке делает все по уму, быстро и без излишнего использования памяти</p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/syurprizy-oracle-obfuskaciya-paketov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle. Таблица dual и connect by</title>
		<link>http://mphome.dp.ua/oracle-tablica-dual-i-connect-by/</link>
		<comments>http://mphome.dp.ua/oracle-tablica-dual-i-connect-by/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 10:38:51 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[connectby]]></category>
		<category><![CDATA[dual]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.mphome.dp.ua/oracle-tablica-dual-i-connect-by/</guid>
		<description><![CDATA[Oracle не перестает удивлять. Oracle 9. Select Level from dual connect by Level &#60; 200 Вернет строго 100 записей. Select Max(Level) from dual connect by Level &#60; 200 Вернет 199. Приятно. Но это еще не всё. :) Select Max(LevelNo) from ( Select Level as LevelNo from dual connect by Level &#60; 200 ) Тоже вернет [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle не перестает удивлять.</p>
<p>Oracle 9.</p>
<p><strong>Select Level from dual connect by Level &lt; 200</strong></p>
<p>Вернет строго 100 записей.</p>
<p><strong>Select Max(Level) from dual connect by Level &lt; 200</strong></p>
<p>Вернет 199.</p>
<p>Приятно.</p>
<p>Но это еще не всё. :)</p>
<p><strong>Select Max(LevelNo)      <br />from       <br />(       <br />Select Level as LevelNo from dual connect by Level &lt; 200       <br />)</strong></p>
<p>Тоже вернет 199</p>
<p>На Oracle 10 всё в порядке.</p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/oracle-tablica-dual-i-connect-by/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oracle Views. Сюрпризы.</title>
		<link>http://mphome.dp.ua/oracle-views-syurprizy/</link>
		<comments>http://mphome.dp.ua/oracle-views-syurprizy/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 11:32:47 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[views]]></category>

		<guid isPermaLink="false">http://www.mphome.dp.ua/oracle-views-syurprizy/</guid>
		<description><![CDATA[Создаем обычную вьюшку. create view TestView as Select Level as N from dual connect by Level &#60; 10 Три следующих запроса работают нормально: Select * from TestView; Select N from TestView; Select n from TestView; Select "N" from TestView; Не понравилось нам название колонки – N, меняем вьюшку create or replace view TestView as Select [...]]]></description>
			<content:encoded><![CDATA[<p>Создаем обычную вьюшку.</p>
</p>
<div style="padding-right: 0px; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px; display: inline" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3a6af8f9-8903-4975-82be-d6edc2cd9111" class="wlWriterSmartContent">
<pre name="code" class="sql">create view TestView as
Select Level as N from dual connect by Level &lt; 10</pre>
</div>
<p>Три следующих запроса работают нормально:</p>
</p>
<div style="padding-right: 0px; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px; display: inline" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0d898e07-dbd7-4b7a-9046-1c50ef140a65" class="wlWriterSmartContent">
<pre name="code" class="sql">Select * from TestView;
Select N from TestView;
Select n from TestView;
Select "N" from TestView;
</pre>
</div>
<p>Не понравилось нам название колонки – N, меняем вьюшку</p>
</p>
<div style="padding-right: 0px; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px; display: inline" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:11fdbf1c-f89a-4e1f-98fb-6ca0f37d2b6f" class="wlWriterSmartContent">
<pre name="code" class="sql">create or replace view TestView as
Select Level as "Test_Column"
from dual connect by Level &lt; 10</pre>
</div>
<p>Первые три запросы вернут ошибку ORA-00904. Последний четвертый выполнится без проблем.</p>
</p>
<div style="padding-right: 0px; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px; display: inline" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7e1f6913-842a-4953-ae6c-7c099035b9df" class="wlWriterSmartContent">
<pre name="code" class="sql">Select Test_Column from TestView
Select test_column from TestView
Select "test_column" from TestView
Select "Test_Column" from TestView</pre>
</div>
<p>Поначалу я решил что всё что заключено в двойные кавычки будет case-sensitive и надо обрамлять имя колонки в двойные кавычки и писать имя букву в букву с учётом регистра. Следующий пример это опровергает. Никаких проблем нет.</p>
</p>
<div style="padding-right: 0px; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px; display: inline" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6cc49be8-1a54-49de-93d4-36ab0497415d" class="wlWriterSmartContent">
<pre name="code" class="sql">create or replace view TestView as
Select Level as "N"
from dual connect by Level &lt; 10

Select * from TestView;
Select N from TestView;
Select n from TestView;
Select "N" from TestView;</pre>
</div>
<p>Оказалось всё гораздно проще.</p>
<p>Если имя колонки заключенно в двойные кавычки, то при запросах его точно также и надо писать с учётом регистра.</p>
<p>Если в запросе вы обрамляете название поле двойными кавычками, то его надо писать в верхнем регистре, если конечно в определении view вы не использовали двойные кавычки.</p>
<p>Ну где у Оракла логика?!</p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/oracle-views-syurprizy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle. Оператор LIKE. Escape character.</title>
		<link>http://mphome.dp.ua/oracle-operator-like-escape-character/</link>
		<comments>http://mphome.dp.ua/oracle-operator-like-escape-character/#comments</comments>
		<pubDate>Mon, 19 May 2008 15:54:54 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[oracle like]]></category>

		<guid isPermaLink="false">http://www.mphome.dp.ua/oracle-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80-like-escape-character/</guid>
		<description><![CDATA[LIKE &#8212; простой условной оператор для сравнения по маске.  С двумя символами: % &#8212; всё что угодно _ &#8212; один символ Я всё время считал, что escape character в Oracle это тот же процент (%). До тех пор пока не пришлось искать в строках этот процент и подчеркивание. После первого же запроса понял, что одновременно [...]]]></description>
			<content:encoded><![CDATA[<p>LIKE &#8212; простой условной оператор для сравнения по маске.  С двумя символами:</p>
<p>% &#8212; всё что угодно</p>
<p>_ &#8212; один символ</p>
<p>Я всё время считал, что escape character в Oracle это тот же процент (%). До тех пор пока не пришлось искать в строках этот процент и подчеркивание. После первого же запроса понял, что одновременно интерпретировать один символ как &laquo;всё что угодно&raquo; и escape symbol как-то несподручно.</p>
<p><em>select * from something where like field like &#8216;%%%%&#8217;;</em></p>
<p>Бесмысленный запрос получается, с escape &#8212; тем более :)</p>
<p><em>select * from something where like field like &#8216;%%%%&#8217; escape &#8216;%&#8217;;</em></p>
<p>Это эквивалент field = &#8216;%%&#8217;</p>
<p>Но вот не пойму, им что, было сложно сделать back-slash escape символом :(, что бы не писать каждый раз escape &#8216;\&#8217;</p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/oracle-operator-like-escape-character/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle. OraOleDb, FetchSize и dotnet</title>
		<link>http://mphome.dp.ua/oracle-oraoledb-fetchsize-i-dotnet/</link>
		<comments>http://mphome.dp.ua/oracle-oraoledb-fetchsize-i-dotnet/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 13:40:58 +0000</pubDate>
		<dc:creator>Михаил</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[fetchsize]]></category>
		<category><![CDATA[oledb]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.mphome.dp.ua/oracle-oraoledb-fetchsize-%d0%b8-dotnet/</guid>
		<description><![CDATA[Простой запрос, три поля из трех таблиц, все строки VARCHAR2. Dotnet framework 2.0. OleDbDataReader. Первые сто строк вычитываются нормально, потом все идет крокозяблами. Думал поседею. Четыре разных сервера, три девятки, одна десятка, проявляется только на одном. Проблемы оказалась в параметре FetchSize (сколько строк возращать за одну вычитку), первый раз все вычитается правильно, все последующие вернут [...]]]></description>
			<content:encoded><![CDATA[<p>Простой запрос, три поля из трех таблиц, все строки VARCHAR2.</p>
<p>Dotnet framework 2.0.</p>
<p>OleDbDataReader.</p>
<p>Первые сто строк вычитываются нормально, потом все идет крокозяблами. Думал поседею.</p>
<p>Четыре разных сервера, три девятки, одна десятка, проявляется только на одном.</p>
<p>Проблемы оказалась в параметре FetchSize (сколько строк возращать за одну вычитку), первый раз все вычитается правильно, все последующие вернут мусор.</p>
<p>Пришлось ставить FetchSize = 100000</p>
<p>Нашел описание проблемы <a href="http://www.pcreview.co.uk/forums/thread-1209724.php">здесь</a>. А вот решения кроме вышепредложенного пока нет.</p>
]]></content:encoded>
			<wfw:commentRss>http://mphome.dp.ua/oracle-oraoledb-fetchsize-i-dotnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

