forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Co-authored-by: Lu, Huayi <luhuayi@huawei.com> Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
130 lines
18 KiB
HTML
130 lines
18 KiB
HTML
<a name="EN-US_TOPIC_0000001689952089"></a><a name="EN-US_TOPIC_0000001689952089"></a>
|
|
|
|
<h1 class="topictitle1">Enumeration Type</h1>
|
|
<div id="body0000001689952089"><p id="EN-US_TOPIC_0000001689952089__p8060118">An enumeration (enum) type is a data type consisting of a static, ordered set of values. They are equivalent to the enum types used in many programming languages. The enumeration type can be a date in a week or a set of status values.</p>
|
|
<div class="section" id="EN-US_TOPIC_0000001689952089__section232419591739"><h4 class="sectiontitle">Declaration of Enumeration Types</h4><p id="EN-US_TOPIC_0000001689952089__p158951718645">Enumeration types can be created using the <strong id="EN-US_TOPIC_0000001689952089__b922731010423">CREATE TYPE</strong> command. For example:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001689952089__screen18595131712614"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">mood</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">ENUM</span><span class="w"> </span><span class="p">(</span><span class="s1">'sad'</span><span class="p">,</span><span class="w"> </span><span class="s1">'ok'</span><span class="p">,</span><span class="w"> </span><span class="s1">'happy'</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001689952089__p18715031368">After an enumeration type is created, it can be used in table and function definitions.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001689952089__screen175937191979"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span>
|
|
<span class="normal">6</span>
|
|
<span class="normal">7</span>
|
|
<span class="normal">8</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">mood</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">ENUM</span><span class="w"> </span><span class="p">(</span><span class="s1">'sad'</span><span class="p">,</span><span class="w"> </span><span class="s1">'ok'</span><span class="p">,</span><span class="w"> </span><span class="s1">'happy'</span><span class="p">);</span>
|
|
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="p">(</span><span class="n">name</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w"> </span><span class="n">current_mood</span><span class="w"> </span><span class="n">mood</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'Moe'</span><span class="p">,</span><span class="w"> </span><span class="s1">'happy'</span><span class="p">);</span>
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">current_mood</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'happy'</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">current_mood</span>
|
|
<span class="c1">------+--------------</span>
|
|
<span class="w"> </span><span class="n">Moe</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">happy</span>
|
|
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001689952089__section79856321017"><h4 class="sectiontitle">Sorting</h4><p id="EN-US_TOPIC_0000001689952089__p118572118914">The order of enumeration values is the order of the values listed when the type is created.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001689952089__screen5717183712103"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'Larry'</span><span class="p">,</span><span class="w"> </span><span class="s1">'sad'</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'Curly'</span><span class="p">,</span><span class="w"> </span><span class="s1">'ok'</span><span class="p">);</span>
|
|
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">current_mood</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="s1">'sad'</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">current_mood</span>
|
|
<span class="c1">-------+--------------</span>
|
|
<span class="w"> </span><span class="n">Moe</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">happy</span>
|
|
<span class="w"> </span><span class="n">Curly</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">ok</span>
|
|
<span class="p">(</span><span class="mi">2</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">current_mood</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="s1">'sad'</span><span class="w"> </span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">current_mood</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">current_mood</span>
|
|
<span class="c1">-------+--------------</span>
|
|
<span class="w"> </span><span class="n">Curly</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">ok</span>
|
|
<span class="w"> </span><span class="n">Moe</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">happy</span>
|
|
<span class="p">(</span><span class="mi">2</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">person</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">current_mood</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="k">SELECT</span><span class="w"> </span><span class="k">MIN</span><span class="p">(</span><span class="n">current_mood</span><span class="p">)</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">person</span><span class="p">);</span>
|
|
<span class="w"> </span><span class="n">name</span>
|
|
<span class="c1">-------</span>
|
|
<span class="w"> </span><span class="n">Larry</span>
|
|
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001689952089__section1798239141614"><h4 class="sectiontitle">Security of Enumeration Types</h4><p id="EN-US_TOPIC_0000001689952089__p598645351511">Each enumeration data type is independent and cannot be compared with other enumeration types.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001689952089__screen969917105192"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">happiness</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">ENUM</span><span class="w"> </span><span class="p">(</span><span class="s1">'happy'</span><span class="p">,</span><span class="w"> </span><span class="s1">'very happy'</span><span class="p">,</span><span class="w"> </span><span class="s1">'ecstatic'</span><span class="p">);</span>
|
|
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">holidays</span><span class="w"> </span><span class="p">(</span><span class="n">num_weeks</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span><span class="w"> </span><span class="n">happiness</span><span class="w"> </span><span class="n">happiness</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">holidays</span><span class="p">(</span><span class="n">num_weeks</span><span class="p">,</span><span class="n">happiness</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="s1">'happy'</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">holidays</span><span class="p">(</span><span class="n">num_weeks</span><span class="p">,</span><span class="n">happiness</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="s1">'very happy'</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">holidays</span><span class="p">(</span><span class="n">num_weeks</span><span class="p">,</span><span class="n">happiness</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="s1">'ecstatic'</span><span class="p">);</span>
|
|
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">holidays</span><span class="p">(</span><span class="n">num_weeks</span><span class="p">,</span><span class="n">happiness</span><span class="p">)</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="s1">'sad'</span><span class="p">);</span>
|
|
<span class="n">ERROR</span><span class="p">:</span><span class="w"> </span><span class="n">invalid</span><span class="w"> </span><span class="k">input</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">enum</span><span class="w"> </span><span class="n">happiness</span><span class="p">:</span><span class="w"> </span><span class="ss">"sad"</span>
|
|
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="n">person</span><span class="p">.</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">holidays</span><span class="p">.</span><span class="n">num_weeks</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">person</span><span class="p">,</span><span class="w"> </span><span class="n">holidays</span>
|
|
<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">person</span><span class="p">.</span><span class="n">current_mood</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">holidays</span><span class="p">.</span><span class="n">happiness</span><span class="p">;</span>
|
|
<span class="n">ERROR</span><span class="p">:</span><span class="w"> </span><span class="k">operator</span><span class="w"> </span><span class="n">does</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">exist</span><span class="p">:</span><span class="w"> </span><span class="n">mood</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">happiness</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001689952089__p8466258568">If comparison is required, you can use a customized operator or add an explicit type to the query.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001689952089__screen1255511211012"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span>
|
|
<span class="normal">6</span></pre></div></td><td class="code"><div><pre><span></span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="n">person</span><span class="p">.</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">holidays</span><span class="p">.</span><span class="n">num_weeks</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">person</span><span class="p">,</span><span class="w"> </span><span class="n">holidays</span>
|
|
<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">person</span><span class="p">.</span><span class="n">current_mood</span><span class="p">::</span><span class="nb">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">holidays</span><span class="p">.</span><span class="n">happiness</span><span class="p">::</span><span class="nb">text</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">num_weeks</span>
|
|
<span class="c1">------+-----------</span>
|
|
<span class="w"> </span><span class="n">Moe</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">4</span>
|
|
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001689952089__section18919326485"><h4 class="sectiontitle">Precautions</h4><ul id="EN-US_TOPIC_0000001689952089__ul126522034282"><li id="EN-US_TOPIC_0000001689952089__li2065218341387">Enumeration tags are case sensitive. 'happy' is different from 'HAPPY'. Spaces in tags also have meanings.</li><li id="EN-US_TOPIC_0000001689952089__li20393173712819">Although enumeration types are primarily intended for static collections of values, there are ways to add new and renamed values to existing enumeration types (see <a href="dws_06_0148.html">ALTER TYPE</a>). Existing values cannot be removed from an enumeration type, and the order of these values cannot be changed unless the enumeration type is deleted and recreated.</li><li id="EN-US_TOPIC_0000001689952089__li20710154111814">The mapping between enumerated values and text tags is stored in the <strong id="EN-US_TOPIC_0000001689952089__b4282844134810">PG_ENUM</strong> system catalog.</li></ul>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_06_0008.html">Data Types</a></div>
|
|
</div>
|
|
</div>
|
|
|