<?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>Oracle &#8211; エンジニア見習い</title>
	<atom:link href="https://otonan-syusyoku.work/archives/tag/oracle/feed" rel="self" type="application/rss+xml" />
	<link>https://otonan-syusyoku.work</link>
	<description>三流プログラマー</description>
	<lastBuildDate>Tue, 06 Jan 2026 07:31:23 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://otonan-syusyoku.work/wp-content/uploads/2023/10/cropped-名称未設定のデザイン-16-32x32.png</url>
	<title>Oracle &#8211; エンジニア見習い</title>
	<link>https://otonan-syusyoku.work</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>SQL学んで気づいたことを紹介するョ</title>
		<link>https://otonan-syusyoku.work/archives/1093</link>
					<comments>https://otonan-syusyoku.work/archives/1093#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Wed, 09 Mar 2022 06:00:47 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1093</guid>

					<description><![CDATA[気づいたこと　〜就職編〜 結局SQL 結局のところSQLは必要不可欠な技術です。 アプリケーションはPHPやJavaといったプログラミング言語を使用すると思いますが、データを扱う事のできる唯一の言語はSQLです。 そのた [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>気づいたこと　〜就職編〜</h2>
<h3>結局SQL</h3>
<p>結局のところSQLは必要不可欠な技術です。</p>
<p>アプリケーションはPHPやJavaといったプログラミング言語を使用すると思いますが、データを扱う事のできる唯一の言語はSQLです。</p>
<p>そのため、SQLが出来るだけで重宝されます。</p>
<p>[getpost id=&#8221;1028&#8243;]</p>
<h3>インフラにもバックエンドにも</h3>
<p>IT業界の職種はかなり広いのですが、SQLはインフラとバックエンドに領域が被っている為、就職の選択肢がかなり広がります。</p>
<p>最近ではフロントの人間もSQLを使用する事があるそうです。←僕の友達情報</p>
<p>そのため、僕の考えとしてはSQLを基盤に学ぶことでデータを扱えるIT人材になれるので、どこを目指したら良いのか分からない人はとりあえずSQLについて学ぶべきです。</p>
<p>[getpost id=&#8221;1045&#8243;]</p>
<h2>気をつけること　〜考え方編〜</h2>
<h3>実行順序</h3>
<p>実行順序の理解は大切です。</p>
<p>呼ばれる順序が分かることで、目的に沿ったSQL文を書くことが出来ます。逆に言うと<span class="sc_marker blue"><strong>実行順序を意識していなければ意図しないデータを取得する事になってしまいます。</strong></span></p>
<p>実行順は以下の通りです。</p>
<ol>
<li>FROM</li>
<li>WHERE</li>
<li>GROUP BY</li>
<li>HAVING</li>
<li>SELECT</li>
<li>DISTINCT</li>
<li>ORDER BY</li>
</ol>
<p>SQLを学習した当初は欲しいデータに意識が向きすぎてしまいSELECT句が重要だと考えていました。</p>
<p>しかし、本当に欲しいデータを取得する場合は<span class="sc_marker blue"><strong>大本のテーブルから考えていく必要があります。</strong></span></p>
<p><span class="sc_marker y">どのテーブルからどの条件でデータを取得していくのか</span>意識してみてください。</p>
<h3>書き方は十人十色</h3>
<p>早めの段階で知りたかったのですが、<span class="sc_marker blue"><strong>SQLの書き方は十人十色</strong></span>です。</p>
<p>&nbsp;</p>
<p>SQLを学びたての時は教科書通りに書かないといけないという意識が強く、柔軟性にかけたSQLを記述していました。(教科書通り→INはEXISTSで代替。サブクエリはできるだけ書かない。)</p>
<p>&nbsp;</p>
<p>しかし実業務でデータを扱う際にはこんな書き方は良くないよって言われている書き方で実装しているSQLはよく目にします。<br />
※1万レコードをUNIONで横持ちのデータを縦持ちに結合している仰天コードを目にしたことがあります。</p>
<p>&nbsp;</p>
<p><span class="sc_marker y">Aを取得するという目的に対して、こうした方が良いよねって言う書き方はあるけど、正解はありません。</span></p>
<p><span class="sc_marker blue"><strong>必要なデータを取得できないことが悪</strong></span>なので、慣れるまでは速さやキレイにデータを取得すると行った事は気にしないでおきましょう。</p>
<p>SQLに関しては知見が増えてくれば<span class="sc_marker blue"><strong>自然</strong><strong>とどのような記述が最適なのかが理解できてくるので少しづつ努力していけば問題なし</strong></span>です。</p>
<h3>データは超重要</h3>
<p>データなんかより画面動かしたりする方がITっぽくてカッコいい〜！なんて思っていたのですが、<span class="sc_marker blue"><strong>ビジネスに必要なものはデータ</strong></span>だと実務に入って気づきました。</p>
<p>&nbsp;</p>
<p>結局の所、<span class="sc_marker blue"><strong>データを自分たちの使いやすい形でデータを取得or加工し、お金を生み出す形でデータを利用しているのがWebサービスの根幹</strong></span>だと思います。</p>
<p>&nbsp;</p>
<p>データを扱えるって最強です。</p>
<h2>気づいたこと　〜書き方編〜</h2>
<h3>インデントは揃えよう</h3>
<p>SQLの経験が浅くても出来る事その1はインデントを揃えよう！です。</p>
<p>以下2つのSQL文を比較してもらえれば分かると思うのですが、格段に見やすさが異なると思います。</p>
<div class="row sp">
<div class="row sp">
<div class="sc_col2 sp">
<pre class="line-numbers"><code class="language-other">SELECT no , name FROM test 
WHERE no &gt; 4 
AND name IN ('aiueo','test') 
ORDER BY no;</code></pre>
</div>
<div class="sc_col2 sp">
<pre class="line-numbers"><code class="language-other">SELECT no , name FROM test 
 WHERE no &gt; 4 
      AND name IN ('aiueo','test') 
 ORDER BY no;</code></pre>
</div>
</div>
</div>
<p>&nbsp;</p>
<h3>予約文字は大文字</h3>
<p>SQLの経験が浅くても出来る事その1は予約文字は大文字で記述！です。</p>
<p>予約文字はSQLで設定されている単語の事を指します。<br />
(例：SELECT.FROM,WHERE,JOIN,)</p>
<p>こちらも比較してもらえれば分かると思います。</p>
<div class="row sp">
<div class="sc_col2 sp">
<pre class="line-numbers"><code class="language-other">select no,name from test
where no &gt; 4
    and name in('aiueo','test')
order by no</code></pre>
</div>
<div class="sc_col2 sp">
<pre class="line-numbers"><code class="language-other">SELECT no , name FROM test 
 WHERE no &gt; 4
      AND name IN ('aiueo','test') 
 ORDER BY no;</code></pre>
</div>
</div>
<h3>目的を考える</h3>
<p>SQLに慣れてきたら何のデータが欲しいのかを考える癖をつけていきましょう。</p>
<p>SQLは様々な記述方法でデータを取得することが出来るため、目的を明確にし必要なデータを取得する事を意識してください。</p>
<p>目的を明確にすることで<span class="sc_marker blue"><strong>どの記述方法が最適なのか</strong></span>が段々と分かってくるはずです。</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1093/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【勉強方】『ORACLE MASTER Silver SQL 2019 』に合格しました！</title>
		<link>https://otonan-syusyoku.work/archives/1028</link>
					<comments>https://otonan-syusyoku.work/archives/1028#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 03 Feb 2022 07:00:44 +0000</pubDate>
				<category><![CDATA[IT資格]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1028</guid>

					<description><![CDATA[合格した試験 この度、「ORACLE MASTER Silver SQL 2019 」に合格しました！ この試験は関数、権限、オブジェクトといったOracleDBの基本操作などが問われる試験となっています。 試験: 1Z [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>合格した試験</h2>
<p>この度、「ORACLE MASTER Silver SQL 2019 」に合格しました！</p>
<p>この試験は関数、権限、オブジェクトといったOracleDBの基本操作などが問われる試験となっています。</p>
<blockquote><p>試験: 1Z0-071-JPN Oracle Database SQL<br />
受験料: 32,340 円（税込） 29,400円（税別）（2021年8月時点）<br />
出題形式: 選択問題<br />
試験時間: 120 分<br />
出題数: 78 問<br />
合格ライン: 63 % （2021年8月時点）</p>
<div class="blockquote_ref">
<div><a href="https://cosol.jp/techdb/2021/08/how_to_get_oracle_master_silver_sql_2019/" target="_blank" rel="noopener">黒本著者によるORACLE MASTER Silver SQL 2019学習方法</a></div>
</div>
</blockquote>
<h2>取得メリット</h2>
<p>オラクルマスターを取得して感じたメリットは2つになります！</p>
<ul>
<li><strong><span class="sc_marker blue">求人サイトのスカウトメールの増加</span></strong></li>
<li><strong><span class="sc_marker blue">社内での評価爆上がり</span></strong></li>
</ul>
<p>以下に取得メリットの詳細を記述しているのですが、取得した自分からすると<span class="sc_marker y">経験の少ないエンジニアは絶対に取得するべき資格</span>です。</p>
<h3>スカウトメール増加</h3>
<p>オラクルマスターはIT資格の中でも権威性のある資格のため<strong><span class="sc_marker blue">企業側への分かりやすいアピール</span></strong>になります。</p>
<p>自分はPaizaやGreenなどのスカウトサービスのあるサービスを利用しているのですが、履歴書にORACLE MASTERの文言を記述するだけでスカウトメールが増加しました。</p>
<p>現在(2022/2)の段階でIT業界の経歴が7ヶ月の自分でも、<span class="sc_marker blue"><strong>「年収370万〜」</strong></span>や<span class="sc_marker blue"><strong>「フルリモート」</strong></span>などのスカウト通知がきます。</p>
<p>現収入が手取り18万(年収換算:約200万)になるため、上記のような求人からスカウトが来るなんて凄く嬉しいですね〜。</p>
<h3>社内での評価</h3>
<p>自分は都内にある企業年数30年の老舗IT企業に務めており、未経験で他業界から転職した自分が<span class="sc_marker blue"><strong>一番仕事のできない社員</strong></span>という扱いです。</p>
<p>しかしOracleMasterの権威性は凄く、取得の報告をすると取得の努力を凄く評価してもらいました。</p>
<p>業務内容の面でもSQLを扱う仕事を振られる事が多くなり、一年目の目標である<strong><span class="sc_marker blue">「SQLを習得する」</span></strong>事に凄く近づいています。</p>
<p>先輩社員からもIT業界で生きていくならSQLは避けては通れない道という風に言われているので、皆さんも取得目指してほしい資格ですね。</p>
<div class="voice clearfix left n_bottom">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2021/04/名称未設定のデザイン-4-1.png" /></p>
<div class="name">先輩社員</div>
</div>
<div class="text sc_balloon left white">SQLの技術があれば仕事が無くなることはないよ！</div>
</div>
<h2>自分の状況</h2>
<h3>スペック</h3>
<p>自分のスペックは以下の通りです。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 21.0938%;">実務経験</td>
<td style="width: 78.9062%;">研修1ヶ月半+実務経験6ヶ月</td>
</tr>
<tr>
<td style="width: 21.0938%;">経験業務</td>
<td style="width: 78.9062%;">
<ul>
<li>画面レイアウト作成</li>
<li>モック作成(HTML,CSS)</li>
</ul>
</td>
</tr>
<tr>
<td style="width: 21.0938%;">SQLの業務経験</td>
<td style="width: 78.9062%;">
<ul>
<li>テーブル作成(約100本)</li>
<li>データ移行(テーブル間)</li>
<li>データ移行のUTテスト</li>
<li>バッチ処理作成(PL/SQL)</li>
<li>バッチ処理のUTテスト</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>SQLを扱う業務を約2ヶ月ほど行っています。</p>
<p>基本的にDB構築や設計などの上流工程に携わることはなく、SELECTやINSERTなどの基本的な構文を使用した業務を行ってきました。</p>
<p>そのため業務を通してSQLの基礎が身についた状況で資格勉強を始めました。</p>
<h3>勉強時間</h3>
<p>勉強時間は約2ヶ月です。</p>
<p>ただし本気で勉強に取り組んだ期間は1ヶ月になります。</p>
<p>ある程度の基礎がある方でちゃんと勉強すれば1ヶ月で取得できる資格だと思います。</p>
<h2>勉強法</h2>
<p>資格取得に向けた勉強には後述する書籍を中心に行うのですが、<span class="sc_marker blue"><strong>SQLの構文理解</strong></span>と<span class="sc_marker blue"><strong>環境構築</strong></span>も大切だと考えています。</p>
<p>資格だけを取ることが目的なら書籍を読み込めば、すぐに取得することができると思います。</p>
<p>しかし、資格を取得しただけの資格マスターになってしまわない為にも下記順番で学習を進めていってほしいです。</p>
<ol>
<li>SQLの構文理解</li>
<li>環境構築</li>
<li>書籍の読み込み</li>
</ol>
<h3>SQLの構文理解</h3>
<p>資格を取っただけの人にならないために<span class="sc_marker blue">SQLでデータを扱える<strong>書く技術</strong></span>が必要です。</p>
<p>自分がSQLの書く技術を無料で身につけた方法は、『<a href="https://sqlzoo.net/wiki/SQL_Tutorial">SQLZOO</a>』というサイトです。</p>
<p>このサイトでは事前にデータが用意されており、抽出する条件が記載された問題を解いていくという<span class="sc_marker blue"><strong>SELECT文を扱うSQLの問題集となっています。</strong></span></p>
<p>このサイトの問題を全て解き終えた頃には結合やグループ化などの記述について理解することができると思います。</p>
<h3>Oracleの環境構築</h3>
<p>OracleMasterを取得するなら自分のPCにOracleをダウンロードすることを強くおすすめします。</p>
<p>自分で環境構築をすることで、<span class="sc_marker blue"><strong>マルチテナントの概念やユーザーの作成や権限などを理解する</strong></span>ことが出来ます。</p>
<p>ユーザーの作成や権限は試験範囲のため、多少面倒ではありますが構築を頑張った方が身のためです。</p>
<p>しかし、Oracleでは『LIVESQL』という環境構築不要でSQLを実行できるツールがあるので環境構築が苦手あるいはめんどくさいと感じる方は利用するのも一つの手です。</p>
<h3>書籍</h3>
<p>ORACLE MASTER Silver SQL 2019に合格するために必要な書籍は下記になります。<br />
<!-- START MoshimoAffiliateEasyLink --><br />
<script type="text/javascript"><br />
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;<br />
b[a]=b[a]||function(){arguments.currentScript=c.currentScript<br />
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};<br />
c.getElementById(a)||(d=c.createElement(f),d.src=g,<br />
d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})<br />
(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20210203","msmaflink");<br />
msmaflink({"n":"オラクルマスター教科書 Silver SQL Oracle Database SQL","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51gLA8E15GL._SL500_.jpg","\/41fR6TkcihL._SL500_.jpg","\/51DCz6PxLgL._SL500_.jpg","\/515lGphaKwL._SL500_.jpg","\/51Pg4u58W5L._SL500_.jpg","\/41L0Fm-3H2L._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4798172367","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#ffcf0f","u_url":"https:\/\/www.amazon.co.jp\/dp\/4798172367","a_id":2019667,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#bf0000","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E6%95%99%E7%A7%91%E6%9B%B8%20Silver%20SQL%20Oracle%20Database%20SQL\/","a_id":2019666,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"OPBy4","s":"s"});<br />
</script></p>
<div id="msmaflink-OPBy4">リンク</div>
<div></div>
<div>この書籍を理由は下記の通りです。</div>
<ul>
<li>ただただ分かりやすい</li>
<li>Oracleの機能紹介</li>
<li>各章ごとに練習問題</li>
<li>模擬試験付き</li>
</ul>
<p>正直この一冊で試験に合格できるので絶対に購入してください。むしろこの書籍以外で勉強する方法を知りません。</p>
<p>MySQLしか触ったことのない自分でも、この書籍を読み終えた頃にはOracleの機能についてある程度理解できていました。</p>
<p>もう<span class="sc_marker blue"><strong>ただの神本</strong></span>です。</p>
<p>勉強法としては一度目を通すレベルで読み、自分が難しいなと感じる機能を理解するまで読み込みまくるという方法を取りました。</p>
<p>また、機能を理解するためにもオブジェクトや権限付与などを手を動かして行うことも多々ありました。</p>
<p>自分が難しいなと感じた機能は以下の通りです。</p>
<ul>
<li>外部表</li>
<li>データディクショナリ</li>
<li>システム権限とオブジェクト権限</li>
</ul>
<p>おそらく一度学習を初めてしまえば、各々壁にぶつかる場面が出てくるはずですが根気強く学習に打ち込めば成果を出すことができると思います。</p>
<h2>最後に</h2>
<p>ORACLE MASTER Silver SQL 2019は経験の浅いエンジニアもしくは未経験からIT業界での参入を狙っている人にはおすすめの資格です。</p>
<p>受験費用が高い、難易度が高いなどの部分がありますが頑張って取得を目指してほしいです〜！</p>
<p>自分はこれからのキャリアを考えて今回取得した資格と親和性が高いJavaやクラウド関係の技術を身に着けていきたいと思います。</p>
<p>皆さん一緒に頑張りましょう。。。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1028/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>シーケンスがあまり好きになれない</title>
		<link>https://otonan-syusyoku.work/archives/1009</link>
					<comments>https://otonan-syusyoku.work/archives/1009#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 22 Jan 2022 03:16:16 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1009</guid>

					<description><![CDATA[シーケンスとは シーケンスとは連番を作り出す為にOracleが用意してくれているオブジェクトです。 1,2,3,4,5…と連続したデータを発動するので、プライマリーキーやユニークキーなどによく使用されます。 MySQLで [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>シーケンスとは</h2>
<p>シーケンスとは連番を作り出す為にOracleが用意してくれているオブジェクトです。</p>
<p>1,2,3,4,5…と連続したデータを発動するので、プライマリーキーやユニークキーなどによく使用されます。</p>
<p>MySQLで言うところのAutoIncrementと似たような機能となっています。</p>
<h2>シーケンスのコード</h2>
<h3>CREATE文</h3>
<pre class="line-numbers"><code class="language-other">CREATE SEQUENCE seqTest
  START WITH 1
  INCREMENT BY 1
  MAXVALUE 1000
  NOCYCLE;</code></pre>
<h3>取得文</h3>
<pre class="line-numbers"><code class="language-other">--連番発行
SQL&gt; select seqTest.nextval from dual;

   NEXTVAL
----------
	 1

--現在の番号取得
SQL&gt; select seqTest.currval from dual;

   CURRVAL
----------
	 1</code></pre>
<p>&nbsp;</p>
<h3>使用例</h3>
<pre class="line-numbers"><code class="language-markup">SQL&gt; desc TBLSEQ;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NO                                        NOT NULL NUMBER(3)
 NAME                                               VARCHAR2(10)

--==================
--test0テーブルの値を使用
--==================
SQL&gt; INSERT INTO TBLseq
select seqTest.nextval
           ,concat(TO_CHAR(no) , concat(name,TO_CHAR(no2)))
from test0;

20 rows created.


SQL&gt; select * from tblseq;

        NO NAME
---------- ----------
         1 0a0
         2 0b1
         3 0a2
         4 0b3
         5 1a0
         6 1b2
         7 1a3
         8 1b4
         9 2a0
        10 2b1
        11 2a2

        NO NAME
---------- ----------
        12 2b3
        13 7a0
        14 7b1
        15 7a2
        16 7b3
        17 9a0
        18 9b1
        19 9a2
        20 9b3

20 rows selected.
</code></pre>
<h2>複数セッションでのシーケンスの扱い</h2>
<p>先程の使用例で20までの連番を出力したシーケンスを別のセッションから参照すると、続きの連番から出力されます。</p>
<pre class="line-numbers"><code class="language-other">--別セッションに接続
SQL&gt;sqlplus〜〜〜

--シーケンスの発行
SQL&gt; select seqtest.nextval from dual;

   NEXTVAL
----------
        21</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1009/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracleの権限付与でハマった話(PDBとCDB)</title>
		<link>https://otonan-syusyoku.work/archives/1015</link>
					<comments>https://otonan-syusyoku.work/archives/1015#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 22 Jan 2022 02:21:14 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1015</guid>

					<description><![CDATA[問題 ローカルユーザーに権限付与を実行すると「ユーザーがいません」というエラーが出力されます。 SYSTEMユーザーでログインしているので権限付与が出来ない訳が無いのですが、思いもよらないところに落とし穴がありました。  [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>問題</h2>
<p>ローカルユーザーに権限付与を実行すると「ユーザーがいません」というエラーが出力されます。</p>
<p>SYSTEMユーザーでログインしているので権限付与が出来ない訳が無いのですが、思いもよらないところに落とし穴がありました。</p>
<pre class="line-numbers"><code class="language-markup">SQL&gt; GRANT CREATE SEQUENCE TO usr1;
GRANT CREATE SEQUENCE TO usr1
                         *
ERROR at line 1:
ORA-01917: user or role 'USR1' does not exist</code></pre>
<h2>権限付与が出来なかった原因</h2>
<p>権限付与が出来なかった原因は、PDBとCDBというOracle独自のマルチテナント構造が原因でした。</p>
<p>CDBが基盤となるDBとなり、その上にPDBと呼ばれるDBが存在するという奇妙な構造となっています。(Dockerのようにコンテナの上にイメージを作成するような感じです)</p>
<p><img fetchpriority="high" decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2022/01/PDB-300x180.png" alt="マルチテナント構造" width="300" height="180" class="aligncenter size-medium wp-image-1016" srcset="https://otonan-syusyoku.work/wp-content/uploads/2022/01/PDB-300x180.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2022/01/PDB.png 500w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>今回、SYSTEMユーザーはCDBに接続しており、権限付与されるUSR1ユーザーはPDBに接続していました。</p>
<p>CDB上にいるSYSTEMユーザーからPDB上にいるUSR1ユーザーに権限が付与は出来ないため、SYSTEMユーザーをPDBに接続する必要があります。</p>
<p>SYSTEMユーザーの接続先をPDBに切り替えることで権限付与の実行が可能になりました！</p>
<h2>解決法</h2>
<p>以下手順で解決できます。</p>
<p>①権限付与側のユーザーの接続先の確認</p>
<pre class="line-numbers"><code class="language-other">--SYSTEMユーザーの接続先確認
SQL&gt; show con_name 

CON_NAME
------------------------------
CDB$ROOT</code></pre>
<p>&nbsp;</p>
<p>②権限付与される側のユーザーの接続先の確認</p>
<pre class="line-numbers"><code class="language-other">--USR1の接続先確認
SQL&gt; show con_name   

CON_NAME
------------------------------
ORCLPDB1</code></pre>
<p>&nbsp;</p>
<p>③権限付与側のユーザーの接続先DB切り替え</p>
<pre class="line-numbers"><code class="language-other">--USR1が接続しているDBに切り替え
SQL&gt; alter session set container = orclPDB1;

Session altered.

</code></pre>
<p>&nbsp;</p>
<p>④GRANT文の発行</p>
<pre class="line-numbers"><code class="language-other">--SYSTEMユーザー権限付与
SQL&gt; GRANT CREATE SEQUENCE TO usr1;

Grant succeeded.

SQL&gt; commit;

Commit complete.

</code></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1015/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>サブクエリの返答は単一行のみ！もしくは述語の指定が必要！</title>
		<link>https://otonan-syusyoku.work/archives/1004</link>
					<comments>https://otonan-syusyoku.work/archives/1004#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 16 Jan 2022 02:21:38 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1004</guid>

					<description><![CDATA[複数行を返すとエラーになります Where句で使用するサブクエリの問い合わせ結果が2行以上になってしまうと「single-row subquery returns more than one row」のエラーが帰ってきま [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>複数行を返すとエラーになります</h2>
<p>Where句で使用するサブクエリの問い合わせ結果が2行以上になってしまうと「single-row subquery returns more than one row」のエラーが帰ってきます。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select * from test
 where no = (select no from test); 
 where no = (select no from test)
             *
ERROR at line 2:
ORA-01427: single-row subquery returns more than one row</code></pre>
<p>サブクエリの結果が複数帰ってきてしまうと<span class="sc_marker blue"><strong>No列の比較にどの値を使用したら良いのか分からない為のエラー</strong></span>です。</p>
<p>そのため、サブクエリの帰ってくる値を単一にする必要があります。</p>
<p>サブクエリを使用する時はケースバイケースのため、その都度サブクエリの帰ってくる件数を意識しましょう。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt;  select * from test
 where no = (select no from test where no = 1);  

	NO NAME
---------- --------------------------------------------------
	 1 aaaaa</code></pre>
<pre class="line-numbers"><code class="language-other">SQL&gt; select * from test
  where no = (select max(no) from test);    

	NO NAME
---------- --------------------------------------------------
	 5 youo
</code></pre>
<h2>サブクエリの結果を複数行受け取れる述語</h2>
<p>もしサブクエリの帰ってくる件数を複数のときにしたい場合は「IN」や「EXISTS」、「ANY」などの述語を指定します。</p>
<p>これらの述語を使用することで<strong><span class="sc_marker blue">サブクエリの結果のどれかと一致するものを正とする事</span></strong>を表現することが出来ます。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select * from test
 where no IN(select no from test0);   

	NO NAME
---------- --------------------------------------------------
	 1 aaaaa
	 2 iiiii
	 2 uouoo</code></pre>
<p>&nbsp;</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select * from test
 where exists(select no from test0 where test.no = test0.no);  2  

	NO NAME
---------- --------------------------------------------------
	 1 aaaaa
	 2 iiiii
	 2 uouoo</code></pre>
<p>&nbsp;</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select * from test
 where no = ANY(select no from test0);  2  

	NO NAME
---------- --------------------------------------------------
	 1 aaaaa
	 2 iiiii
	 2 uouoo
</code></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1004/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>テーブル結合の名前が多すぎる！！からまとめたよ</title>
		<link>https://otonan-syusyoku.work/archives/995</link>
					<comments>https://otonan-syusyoku.work/archives/995#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 15 Jan 2022 07:19:45 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=995</guid>

					<description><![CDATA[参考書を読んでも分かりづらい SQLの学習のために参考書を読んでも、「クロス結合が〜〜」「自然結合は〜〜」とたくさんの結合名称が出てきてしまい、こんがらがったのでまとめました。 当記事では内部結合と外部結合以外も紹介して [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>参考書を読んでも分かりづらい</h2>
<p>SQLの学習のために参考書を読んでも、「クロス結合が〜〜」「自然結合は〜〜」とたくさんの結合名称が出てきてしまい、こんがらがったのでまとめました。</p>
<p>当記事では内部結合と外部結合以外も紹介しているのですが、内部結合と外部結合さえ知っていればやっていけます。</p>
<p>SQL関連の資格を勉強している方やSQLの知識が浅い方は「そういう結合もあるんだ」くらいの理解をして頂ける記事になっていれば幸いです。</p>
<h2>結合の種類</h2>
<p>自分がテーブル結合の勉強をしている際に出会った結合名称です。</p>
<ol>
<li>内部結合</li>
<li>外部結合(左外部結合、右外部結合)</li>
<li>完全外部結合</li>
<li>自己結合</li>
<li>クロス結合</li>
<li>自然結合</li>
<li>非等価結合</li>
</ol>
<p>※自分はSQLを使用した実務経験が6ヶ月(2022年1月時点)しかないのですが、内部結合と外部結合の使用がほとんどでした。(自己結合と非等価結合は1,2回の使用)</p>
<h2>2テーブルで結合を試していくぅ</h2>
<pre class="line-numbers"><code class="language-other">SQL&gt; select * from testJoin;

	NO NAME       P        AGE T
---------- ---------- - ---------- -
	 1 michel     1 	20 1
	 2 jordan     2 	30 1
	 3
	 4 Lebron     1 	25 1
	 5 hanamiti   2 	18 2
	 0 Popovich   0 	80 2

SQL&gt; select * from testJoin2;

	NO POSITION
---------- ----------
	 1 PG
	 2 SG
	 3 Substitute</code></pre>
<h3>内部結合</h3>
<p>内部結合は、<span class="sc_marker blue"><strong>結合Keyが一致する行のみを取得するため</strong></span>の構文です。</p>
<p>下記のSQL文は、「No:0」がtestJoin1に登録されていない為、testJoinの「No:0,NAME:Popovich」のデータは取得されません。</p>
<p>マスタデータがないデータを弾く時によく使用されますね。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select t1.name , t2.POSITION from testJoin t1
inner join testJoin2 t2 on t2.NO = t1.pname;   2  

NAME	   POSITION
---------- ----------
michel	   PG
jordan	   SG
Lebron	   PG
hanamiti   SG
</code></pre>
<h3>外部結合(左外部結合、右外部結合)</h3>
<p>外部結合は、<span class="sc_marker blue"><strong>基となるテーブルのデータをすべて残した上での結合</strong></span>となります。</p>
<p>下記SQL文の場合だと、testJoinを基とするため結合Keyに一致しない「No:0」と「No:3」のレコードを取得することが出来ます。</p>
<pre class="line-numbers"><code class="language-other">select t1.no , t1.name , t2.POSITION from testJoin t1
left join testJoin2 t2 on t2.NO = t1.pname order by t1.no; 
SQL&gt;   2  
	NO NAME       POSITION
---------- ---------- ----------
	 0 Popovich
	 1 michel     PG
	 2 jordan     SG
	 3
	 4 Lebron     PG
	 5 hanamiti   SG</code></pre>
<h3>完全外部結合</h3>
<p>完全外部結合は、<strong><span class="sc_marker blue">結合Keyが不一致でも結合するテーブルの全データを取得するため</span></strong>の構文です。</p>
<p>結合Keyに一致しない「No:0,NAME:Popovich」「No:3,NAME:NULL」「No:NULL,NAME:NULL,Position:Substitute」の列が取得されていることが分かります。</p>
<p>正直使ったことないです。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select t1.no , t1.name , t2.POSITION from testJoin t1
Full outer join testJoin2 t2 on t2.NO = t1.pname order by t1.no;   2  

	NO NAME       POSITION
---------- ---------- ----------
	 0 Popovich
	 1 michel     PG
	 2 jordan     SG
	 3
	 4 Lebron     PG
	 5 hanamiti   SG
		      Substitute</code></pre>
<h3>自己結合</h3>
<p>自己結合は、<span class="sc_marker blue"><strong>同一のテーブルを別テーブルと考えてデータを取得する</strong></span>ための構文です。</p>
<p>下記SQL文では、同一のチームに所属している選手同士を出力しています。(<span class="sc_marker y">※自己結合は同一テーブルを別テーブルとして扱うので別名称を付与しなければいけません</span>)</p>
<p>余談ですがWHERE句にNAME列の比較演算子を使用しているので、同じ組み合わせのチームを除外しています。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select t1.no,t1.name,t1.team_id,t2.no,t2.name,t2.team_id from testJoin t1 
inner join testJoin t2 on t1.team_id = t2.team_id
where t1.name &gt; t2.name
order by t1.no;   2    3    4  

	NO NAME       T 	NO NAME       T
---------- ---------- - ---------- ---------- -
	 1 michel     1 	 2 jordan     1
	 1 michel     1 	 4 Lebron     1
	 2 jordan     1 	 4 Lebron     1
	 5 hanamiti   2 	 0 Popovich   2</code></pre>
<h3>クロス結合</h3>
<p>クロス結合は<span class="sc_marker blue">結合するテーブルのデータ数を乗算する</span>構文のことを指します。</p>
<p>testJoinは6個のデータを、testJoin1は3個のデータを保持しています。</p>
<p>そのため6×3=18行が取得されます。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select t1.name,t2.POSITION from testJoin t1,testJoin2 t2
  order by t1.no,t2.no;  2  

NAME	   POSITION
---------- ----------
Popovich   PG
Popovich   SG
Popovich   Substitute
michel	   PG
michel	   SG
michel	   Substitute
jordan	   PG
jordan	   SG
jordan	   Substitute
	   PG
	   SG

NAME	   POSITION
---------- ----------
	   Substitute
Lebron	   PG
Lebron	   SG
Lebron	   Substitute
hanamiti   PG
hanamiti   SG
hanamiti   Substitute</code></pre>
<h3>自然結合</h3>
<p>自然結合は、<span class="sc_marker blue"><strong>結合するテーブル同士のカラム名称とデータ型をSQLさんが判断してくれる</strong></span>構文です。</p>
<p>下記SQL文だと、testJoinのNo列(NUMBER型)とtestJoin1のNo列(NUMBER型)が同一名称、同一データ型になるためNO列を結合Keyに設定してくれています。</p>
<p>下記のデータを正として取得します。</p>
<p>testJoin「No:1,NAME:michel」= testJoin1「No:1,PG」<br />
testJoin「No:2,NAME:jordan」= testJoin1「No:1,SG」<br />
testJoin「No:3,NAME:NULL」= testJoin1「No:1,Substitute」</p>
<p>多分実務で使うこと無いんじゃないかと思います。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select no,t1.name,t2.POSITION from testJoin t1 
natural LEFt join testJoin2 t2;  

	NO NAME       POSITION
---------- ---------- ----------
	 0 Popovich
	 1 michel     PG
	 2 jordan     SG
	 3	      Substitute
	 4 Lebron
	 5 hanamiti
</code></pre>
<h3>非等価結合</h3>
<p>非等価結合は<span class="sc_marker blue"><strong>結合条件に「＝」演算子を使用しない</strong></span>構文を指します。</p>
<p>「＝」を条件に指定しないだけなので、あまり難しく考える必要はありません。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select * from testJoin t1 
inner join testJoin2 t2 on t1.PNAME &lt;&gt; t2.POSITION
where t1.no &lt;3
order by t1.no;  2    3    4  

	NO NAME       P        AGE T	     NO POSITION
---------- ---------- - ---------- - ---------- ----------
	 0 Popovich   0 	80 2	      1 PG
	 0 Popovich   0 	80 2	      2 SG
	 0 Popovich   0 	80 2	      3 Substitute
	 1 michel     1 	20 1	      1 PG
	 1 michel     1 	20 1	      2 SG
	 1 michel     1 	20 1	      3 Substitute
	 2 jordan     2 	30 1	      1 PG
	 2 jordan     2 	30 1	      2 SG
	 2 jordan     2 	30 1	      3 Substitute</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/995/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Silver SQL試験対策】ビューについて</title>
		<link>https://otonan-syusyoku.work/archives/984</link>
					<comments>https://otonan-syusyoku.work/archives/984#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 28 Nov 2021 08:22:05 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=984</guid>

					<description><![CDATA[ビューについて ビューとはSELECT文を格納しておく変数のようなものです。 プログラムを学んだ方ならしっくり来ると思うのですが、変数に格納しておくことで共通化をすることでいろいろな場面で簡単に呼び出すことができます。  [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>ビューについて</h2>
<p>ビューとは<span class="sc_marker blue"><strong>SELECT文を格納しておく変数</strong></span>のようなものです。</p>
<p>プログラムを学んだ方ならしっくり来ると思うのですが、変数に格納しておくことで共通化をすることでいろいろな場面で簡単に呼び出すことができます。</p>
<h2>作成構文</h2>
<pre class="line-numbers"><code class="language-other">SQL&gt; select * from test;

	NO NAME
---------- --------------------------------------------------
	 1 aaaaa
	 2 ooooo
	 3 oooaa
	 2 ooooo
	 3 oooaa

SQL&gt; create or replace view test_view as
  2  select * from test;

View created.

SQL&gt; select * from test_view;

	NO NAME
---------- --------------------------------------------------
	 1 aaaaa
	 2 ooooo
	 3 oooaa
	 2 ooooo
	 3 oooaa</code></pre>
<h2>使用方法</h2>
<h3>SELECT文の共通化</h3>
<p>ビューを作成することで、SELECT文の共通化を図ることができます。</p>
<p>システムの中で値を得る際にSELECT文を記述して値を取得するよりもSELECT文を格納したビューを呼び出すほうが効率が良く、記述ミスを防ぐことができます。</p>
<p>プログラムにおける変数と同等の扱いが可能ですね！</p>
<h3>値を隠す</h3>
<p>これは権限でもできる話なのですが、見られたくないデータを隠す際にもビューを使用することがあります。</p>
<p>例えば｛社員名、年齢、性別、給与、持病｝をもったテーブルがあると考えてください。</p>
<p>社員名や年齢、性別はデータを見られても問題ないのですが、給与や持病などのプライベートなデータは案件によっては隠したい場合があると思います。</p>
<p>そんなときに一般社員が業務に使用するデータとして｛社員名、年齢、性別｝をAビューに格納し、｛社員名、年齢、性別、給与、持病｝を格納したビューを管理者用にといった使い分けの方法があります。</p>
<h2>マテリアライズドビュー</h2>
<p>ビューには通常のビューとマテリアライズドビューの2種類のビューが存在します。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 24.5536%;">ビュー</td>
<td style="width: 75.4464%;">ビュー作成時のデータしか取得できない。</td>
</tr>
<tr>
<td style="width: 24.5536%;">マテリアライズドビュー</td>
<td style="width: 75.4464%;">ビュー作成後も作成に使用したテーブルに更新があれば更新したテーブルの値を取得できる。</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>マテリアライズドビューはビューとテーブルが同期している状態をイメージしてほしいです。</p>
<p>同期していることによってビュー作成時に使用したテーブルに更新がかかればマテビューも同時に更新処理が行われます。</p>
<p>下記の場合では、テーブルにTRUNCATEを実行するとそのテーブルを参照して作成したマテビューも同時に更新されます。(マテビューの更新は自動の場合と手動の場合をCREATE時に指定することができます。)</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; create materialized view test_mat as
  2  select * from test;

Materialized view created.

SQL&gt; select * from test_mat;

	NO NAME
---------- --------------------------------------------------
	 1 aaaaa
	 2 ooooo
	 3 oooaa
	 2 ooooo
	 3 oooaa

SQL&gt; truncate table test;

Table truncated.

SQL&gt; select * from test_mat;

no rows selected</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/984/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Silver SQL試験対策】日付型が一番難しい</title>
		<link>https://otonan-syusyoku.work/archives/979</link>
					<comments>https://otonan-syusyoku.work/archives/979#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 28 Nov 2021 04:39:57 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=979</guid>

					<description><![CDATA[日付型の種類 Oracleの日付型は以下6種類(期間データ型も含む)です。 DATE SYSDATE TIMESTAMP SYSTIMESTAMP TIMESTAMP WITH TIME ZONE CURRENT_TIM [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>日付型の種類</h2>
<p>Oracleの日付型は以下6種類(期間データ型も含む)です。</p>
<table style="border-collapse: collapse; width: 100%; height: 196px;">
<tbody>
<tr style="height: 49px;">
<td style="width: 37.1652%; height: 49px;">DATE</td>
<td style="width: 62.8348%; height: 49px;">SYSDATE</td>
</tr>
<tr style="height: 49px;">
<td style="width: 37.1652%; height: 49px;">TIMESTAMP</td>
<td style="width: 62.8348%; height: 49px;">SYSTIMESTAMP</td>
</tr>
<tr style="height: 49px;">
<td style="width: 37.1652%; height: 49px;">TIMESTAMP WITH TIME ZONE</td>
<td style="width: 62.8348%; height: 49px;">CURRENT_TIMESTAMP</td>
</tr>
<tr style="height: 49px;">
<td style="width: 37.1652%; height: 49px;">TIMESTAMP WITH LOCAL TIMEZONE</td>
<td style="width: 62.8348%; height: 49px;">LOCALTIMEStAMP</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 37.2768%;"> INTERVAL YEAR TO MONTH</td>
<td style="width: 62.7232%;">SYSDATE + INTERVAL &#8216;1-1&#8217; YEAR TO MONTH</td>
</tr>
<tr>
<td style="width: 37.2768%;">INTERVAL DAY TO SECOND</td>
<td style="width: 62.7232%;">SYSTIMESTAMP + INTERVAL &#8216;5 01:00:00&#8217; DAY TO SECOND</td>
</tr>
</tbody>
</table>
<p>DATE型とTIMESTAMP型の違い：<span class="sc_marker blue"><strong>ミリ秒単位を含むのがTIMESTAMP</strong>(</span>厳格なシステム以外は基本的に日付型はDATE型使うって言ってた。先輩が。)</p>
<p>&nbsp;</p>
<p>TIMESTAMP WITH TIME ZONE型とTIMESTAMP WITH TIME ZONE型の違い:</p>
<p>どちらもタイムゾーンの情報を格納するのですが、<span class="sc_marker blue"><strong>TIMESTAMP WITH TIME ZONE型がDBのタイムゾーンに変換されてデータが保存されます。</strong></span>例えばDBのタイムゾーンが「ASIA/TOKYO」の場合、ASIA/TOKYOのタイムゾーンに変換されて保存されます。</p>
<p>また、TIMESTAMP WITH TIME ZONE型を取得する時だけタイムゾーン名称が表示されます。「日付 時間 タイムゾーン名称」</p>
<p>&nbsp;</p>
<p>INTERVALの違い：どちらも時刻の差分を管理するデータ型。<span class="sc_marker blue"><strong>年月がINTERVAL YEAR TO MONTH</strong>。<strong>日と秒を管理するのがINTERVAL DAY TO SECOND。</strong></span></p>
<h2>タイムゾーンについて</h2>
<p>Oracleは世界的に使用されるRDBMSのため各地域に合わせた時刻を表示することができます。(素人目線での説明です。)</p>
<ol>
<li><strong>CURRENT_DATE</strong>(セッションのタイムゾーン)</li>
<li><strong>CURRENT_TIMESTAMP</strong>(セッションのタイムゾーン)</li>
<li><strong>SYSDATE</strong>(データベースのタイムゾーン)</li>
<li><strong>SYSTIMESTAMP</strong>(データベースのタイムゾーン)</li>
<li><strong>LOCALTIMESTAMP</strong>(セッションのタイムゾーン)</li>
</ol>
<pre class="line-numbers"><code class="language-other">SQL&gt;select systimestamp from dual;

SYSTIMESTAMP                   
-------------------------------
21-11-28 03:41:28.349648000 GMT

SQL&gt;alter session set time_zone='Asia/Tokyo';

SQL&gt;select current_timestamp from dual;
CURRENT_TIMESTAMP                     
--------------------------------------
21-11-28 12:41:28.360894000 ASIA/TOKYO</code></pre>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title">補足</div>
<div class="sc_frame ">
<div class="sc_frame_text">下記構文で世界標準時刻との差が求めれます。自分のタイムゾーンが知りたいときなどにご使用を。</div>
<div>SELECT DBTIMEZONE FROM dual;</div>
</div>
</div>
<h2>表示について</h2>
<p>日付型には数値型や文字列型のように文字列を指定することができないのが特徴のひとつなのですが、システムによっては「年月のみ」「月と日のみ」といった表示をしたい時があると思います。</p>
<p>そんな時は<strong>NLS_DATE_FORMAT</strong>という書式設定を変更することで表示形式を変えることができます。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; select sysdate from dual;

SYSDATE
---------
27-NOV-21

SQL&gt; alter session set NLS_DATE_FORMAT='YYYY/MM/DD';

Session altered.

SQL&gt; select sysdate from dual;

SYSDATE
----------
2021/11/27</code></pre>
<p>NLS_DATE_FORMATで設定の変更を行うことで書式が変更されるのですが、<span class="sc_marker blue"><strong>日付型の書式は以下の設定にも影響を受けます。</strong></span></p>
<ul>
<li>NLS_DATE_LANGUAGE</li>
<li>NLS_TERRITORY</li>
</ul>
<p>NLS_DATE_LANGUAGEがAMERICANに設定されている場合、下記のようになります。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt; alter session set NLS_DATE_FORMAT='yyyy-mm-dd-day';

Session altered.

SQL&gt; select sysdate from dual;

SYSDATE
--------------------
2021-11-28-sunday</code></pre>
<p>NLS_DATE_LANGUAGをJapaneseに変更すると下記のようになります。</p>
<pre class="line-numbers"><code class="language-other">SQL&gt;alter session set NLS_DATE_LANGUAGE='Japanese';

SYSDATE       
--------------
2021-11-28-日曜日</code></pre>
<p>&nbsp;</p>
<p>下記サイトが超わかりやすい解説をしてるので目を通してみてください。</p>
<p><a href="https://dev.classmethod.jp/articles/rds-for-oracle-nls-param/">知らないとチョットつまづく RDS for Oracle の NLS パラメータ</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/979/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Silver SQL試験対策】一時表の使い道や作成方法のまとめ</title>
		<link>https://otonan-syusyoku.work/archives/968</link>
					<comments>https://otonan-syusyoku.work/archives/968#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Tue, 23 Nov 2021 05:52:49 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=968</guid>

					<description><![CDATA[一時表 一時表とは、名前の通り「データを一時的に預かってくれる表」のことを指します。 セッションやトランザクションを終了するとデータを削除してくれるので、構文を試したいときなどに使用します。 自分が使用した例としては同じ [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>一時表</h2>
<p>一時表とは、名前の通り<span class="sc_marker blue"><strong>「データを一時的に預かってくれる表」</strong></span>のことを指します。</p>
<p>セッションやトランザクションを終了するとデータを削除してくれるので、構文を試したいときなどに使用します。</p>
<p>自分が使用した例としては同じDB内でデータ移行を行ったときに正しいデータ移行を行えているかについて確認するときに使用しました。</p>
<pre class="line-numbers"><code class="language-other">--時表TESTテーブルからデータ移行
CREATE GROBAL TEMPORARY TABLE TEST AS SELECT * FROM HOGE;
CREATE GROBAL TEMPORARY TABLE FUGA AS SELECT * FROM HOGE WHERE 1=2;

--データ移行
INSERT INTO FUGA
SELECT * FROM HOGE;</code></pre>
<h2>GROBAL一時表とPRIVATE一時表</h2>
<p>どちらも一時表であることに変わりはないのですが、下記の違いがあります。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 19.8661%;">共通部分</td>
<td style="width: 80.1339%;">・セッション、トランザクション終了時にデータが削除<br />
・自分のセッション以外からは一時表を参照できない<br />
・セッションごとに一時表は独立</td>
</tr>
<tr>
<td style="width: 19.8661%;">GROBAL</td>
<td style="width: 80.1339%;">・セッション、トランザクション終了後も<span class="sc_marker blue"><strong>テーブルの定義が残る。</strong></span>(データディクショナリに保存されるため)<br />
・テーブル定義はデータベース内に残る。(いつでも再利用可能)<br />
・テーブル定義はDROP TABLEで削除。(通常のテーブル削除と一緒)</td>
</tr>
<tr>
<td style="width: 19.8661%;">PRIVATE</td>
<td style="width: 80.1339%;">・セッション、トランザクション終了時に<span class="sc_marker blue"><strong>データと共にテーブル定義も削除。</strong></span><br />
・定義情報も削除されるので、隠れて色々なことが試せる。<br />
・<strong><span class="sc_marker blue">テーブル作成時には「ORA$PTT_」</span></strong>を付ける。(設定で切替可能)</td>
</tr>
</tbody>
</table>
<h2>作成方法</h2>
<pre class="line-numbers"><code class="language-other">--GROBAL一時表
CREATE GROBAL TABLE AAA(
型情報
)
オプション情報

--*オプション*
--セッション終了時に自動削除
ON COMMIT PRESERVE ROWS

--トランザクション終了時に自動削除
ON COMMIT DELETE ROWS</code></pre>
<pre class="line-numbers"><code class="language-other">--PRIVATE一時表
CREATE PRIVATE TEMPORARY TABLE ORA$PTT_BBB(
型情報
)
オプション情報

--*オプション*
--セッション終了時に自動削除
ON COMMIT PRESERVE DEFINITION
--トランザクション終了時に自動削除
ON COMMIT DROP DEFINITION;
</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/968/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Silver SQL試験対策】Oracleの権限についてまとめてみたよ</title>
		<link>https://otonan-syusyoku.work/archives/955</link>
					<comments>https://otonan-syusyoku.work/archives/955#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 20 Nov 2021 15:43:14 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=955</guid>

					<description><![CDATA[権限の目的 権限という概念がある目的は、ユーザーごとにできることを分けることでデータベースを安全に運用するためです。 &#160; 例えば、会社を想像してほしいのですが、社長と新卒の社員を想像してみてください。 社長が会 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>権限の目的</h2>
<p>権限という概念がある目的は、<span class="sc_marker blue"><strong>ユーザーごとにできることを分けることでデータベースを安全に運用するため</strong></span>です。</p>
<p>&nbsp;</p>
<p>例えば、会社を想像してほしいのですが、社長と新卒の社員を想像してみてください。</p>
<p>社長が会社の最終決定権を持っているの対して、新卒の社員は雑用の仕事を任されるはずです。</p>
<p>雑用ですら手一杯の新卒の社員に会社の最終決定権を持たしてしまうと恐ろしいことが起きてしまうことは簡単に予想できます。</p>
<p>データベースも同じでデータ削除をして良い人、スキーマを作成していい人などの様に権限を切り分けることで安全に運用できます。</p>
<p>&nbsp;</p>
<p>また、別の切り口で考えると<span class="sc_marker blue"><strong>システム運用のために権限を振り分ける</strong></span>という理由もあります。</p>
<p>会社内で部署が存在するように、</p>
<p>Aユーザーはa業務関連のテーブルを操作でき、Bユーザーはb業務とc業務関連のテーブルを操作できる様にするために権限を振り分ける事もできます。</p>
<p>営業部が採用権限がないようなイメージですね！</p>
<p>&nbsp;</p>
<p>話がゴチャゴチャしてしまいましたが、権限はとにかく必要という事です！！</p>
<h2>権限の構文</h2>
<pre class="line-numbers"><code class="language-other">--権限の付与にはGRANT構文。
GRANT SELECT,INSERT,UPDATE ON usr1.TEST TO usr2;

--権限の剥奪にはREVOKE構文。
REVOKE SELECT,INSERT,UPDATE ON usr1.TEST from usr2;</code></pre>
<h2>権限の種類</h2>
<h3>システム権限</h3>
<p>システム権限とはデータベースに対する命令を行うための権限のことを指します。</p>
<p>言葉を柔らかくして説明すると<span class="sc_marker blue"><strong>Oracle様にお願いを聞いてもらうための装備</strong></span>のような感覚です。</p>
<p>例えば、社員証がないと会社に入れない様に命令ごとのシステム権限がないとOracle様が動いてくれずDBに対して何も実行することができません。(難しく感じた方ごめんなさい)</p>
<p>&nbsp;</p>
<p>システム権限の種類は数多くあるので、自分が勉強した時にイメージしやすかったものだけ紹介します。</p>
<table style="border-collapse: collapse; width: 100%; height: 206px;">
<tbody>
<tr style="height: 10px;">
<td style="width: 33.5938%; height: 10px;">ユーザーの作成</td>
<td style="width: 66.4062%; height: 10px;">CREATE　USER</td>
</tr>
<tr style="height: 49px;">
<td style="width: 33.5938%; height: 49px;">データベースへの接続</td>
<td style="width: 66.4062%; height: 49px;">CREATE　SESSION</td>
</tr>
<tr style="height: 49px;">
<td style="width: 33.5938%; height: 49px;">表の作成</td>
<td style="width: 66.4062%; height: 49px;">CREATE　TABLE</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>僕は初めてOracleでユーザーを作成した際にSESSION権限を付与するのを忘れてしまい、DB接続ができず3日ほど立ち往生した経験があります。最低限付与しなければいけない権限などもあるので一度は目を通したほうが良いかもしれません！</p>
<p>ちなみにこのページ見やすかったのでシステム権限の種類について確認したい方は呼んでみてください。</p>
<p><a href="http://itref.fc2web.com/oracle/system-privilege.html">Oracleシステム権限の一覧と確認</a></p>
<h4>ADMIN OPTION</h4>
<p>他のユーザーからシステム権限を付与され、その権限を別のユーザーに付与する場合は「GRANT ADMIN」を指定する必要があります。</p>
<p>下記コードでは、「GRANT ADMIN」を指定することでusr2は別のユーザーにオブジェクト権限を付与できるようになりました。</p>
<pre class="line-numbers"><code class="language-other">--usr2は接続権限を付与され、他人に譲渡できる。
GRANT CREATE SESSION TO usr2 WITH ADMIN OPTION; </code></pre>
<h3>オブジェクト権限</h3>
<p>オブジェクト権限とは<span class="sc_marker blue"><strong>自分以外のオブジェクトに対して命令を実行できる様にするため</strong></span>の権限です。</p>
<p>これはイメージしやすいと思うのですが、友達の物(パソコンでも車でも何でも良いです)に対して友達の許可がないと使用するのはNGのはずです。</p>
<p>Oracleも一緒で、自分以外のユーザーが保持しているオブジェクトに対して権限がないとそのオブジェクトには何も実行することができません。</p>
<p>※ちなみに、自分が作成したオブジェクトに対しては権限はいりません。</p>
<h4>GRANT OPTION</h4>
<p>他のユーザーからオブジェクト権限を付与され、その権限を別のユーザーに付与する場合は「GRANT OPTION」を指定する必要があります。</p>
<p>下記コードでは、「GRANT OPTION」を指定することでusr2は別のユーザーにオブジェクト権限を付与できるようになりました。</p>
<p>また、「GRANT OPTION」を指定して付与された権限は大元のユーザーによって権限が削除されると連鎖的に権限が削除されます。</p>
<pre class="line-numbers"><code class="language-other">--usr2は別のユーザーに権限を付与できるようになった
GRANT SELECT,INSERT ON usr1.TEST TO usr2 WITH GRANT OPTION; 

--usr2が実行。usr3にも同じ権限付与できる。
GRANT SELECT,INSERT,UPDATE ON usr1.TEST TO usr3;  

--usr1が実行。usr2の権限が消えると共に連鎖的にusr3の権限も消える。
REVOKE SELECT,INSERT,UPDATE ON usr1.TEST FROM usr2;</code></pre>
<h2>ロール</h2>
<p>ロールとは権限をまとめたもので、プログラミングでいうところの配列のような扱いです。</p>
<p>配列のように扱えることで<span class="sc_marker blue"><strong>一度定義しておけば繰り返し呼び出せる</strong></span>という利点があるため、実務ではよく使われているらしいです。（先輩が言ってた。）</p>
<p>また、ロールの凄いところはシステム権限とオブジェクト権限を同時に格納できるという点です。便利ですねー。</p>
<pre class="line-numbers"><code class="language-other">CREATE ROLE TEST_ROLL;
GRANT CREATE SESSION TO TEST_ROLL;  --システム権限付与
GRANT SELECT,INSERT ON TEST_ROLL;　　--オブジェクト権限付与
GRANT TEST_ROLL TO usr1;</code></pre>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title">補足</div>
<div class="sc_frame ">
<div class="sc_frame_text">・ロールにロールを付与することもできる。<br />
・PUBLICロールと呼ばれる全ユーザーに適用されるロールがある。</div>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/955/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
