読者です 読者をやめる 読者になる 読者になる

技術周りのあれこれ

主に自分用のメモです。技術的なことや個人的にやってみたことを書いてます。

SQL全然できない僕に教えてくれたこと①

PostgreSQL DB

はじめに
社内でDB勉強会が開かれたので参加して学んだことを書きます。
今回はPostgreSQLです。


  • t_answerテーブルのinsert_datetimeカラムに年月日時間が入っている。
      年月毎の件数を出したい。
SELECT to_char(insert_datetime,'YYYY/mm'),count(*) 
    FROM t_answer  
    GROUP BY to_char(insert_datetime, 'YYYY/mm');  

to_charという関数を使って日付変換できます。
ちなみにMySQLではdate_format関数を使う。to_charは使えないので注意。


  • 上記のデータをt_userテーブルのgender毎に分けて集計したい。
SELECT to_char(t_answer.insert_datetime,'YYYY/mm'),t_user.gender,count(*) 
    FROM t_answer  
    JOIN t_user ON t_user.id=t_answer.user_id  
    GROUP BY to_char(t_answer.insert_datetime, 'YYYY/mm'),t_user.gender;  

JOINでテーブルくっつけます。


  • t_answerテーブルにあるcorrectの値がt:正解、f:不正解とし、得点が上位10名のユーザーを表示したい。
SELECT user_id,challenge_id,count(*)
    FROM t_answer  
    WHERE correct='t'   
    GROUP BY user_id,challenge_id  
    ORDER BY count(*) DESC LIMIT 10;  

DESCで降順にして、LIMITで件数を絞ります。


  • ユーザ毎の平均点数上位10名を表示したい。
SELECT user_id, avg(count)  
FROM (  
    SELECT user_id,challenge_id,count(*)
    FROM t_answer  
    WHERE correct='t'   
    GROUP BY user_id,challenge_id  
    ORDER BY count(*) DESC) AS nyan  
GROUP BY user_id  
ORDER BY avg DESC LIMIT 10;  

平均を出すにはavg関数を使う。
上の問題結果から表示するのでfrom内でselectして、ASで別名を付けておきます。 いわゆるサブクエリってやつらしいです。
※AS nyan = あずにゃん(ry


  • t_groupにいるユーザ人数のランキング表示したい。
select RANK() over(ORDER BY count(user_id) DESC),t_group.name,count(user_id)  
    from t_group  
    JOIN r_group_member on t_group.id=r_group_member.group_id  
    GROUP BY r_group_member.group_id,t_group.name  
    ORDER BY count(r_group_member.user_id) DESC;  

ランキングはRANK関数を使います。


  • 重複するユーザーは除いた年月毎の集計を出したい。
SELECT to_char(insert_datetime,'YYYY/mm'),count(DISTINCT user_id)   
FROM t_answer  
GROUP BY to_char(insert_datetime, 'YYYY/mm') LIMIT 10;  

重複する値を除くときは、DISTINCTを入れます。


  • ユーザ情報で
    gender 1:男性
    gender 2:女性
    として100件表示したい。
SELECT id,name,  
CASE WHEN gender=1 THEN 'male'  
     WHEN gender=2 THEN 'female'  
ELSE 'other'  
END as nyan  
FROM t_user  
ORDER BY "id" LIMIT 100;    

値を条件付きで表示したい場合はcase文を使います。


  • t_userのidが偶数か奇数かを表示する。
SELECT id,name,
CASE WHEN MOD(id,2)=0 THEN '偶数'  
     WHEN MOD(id,2)=1 THEN '奇数'  
ELSE 'other'  
END as nyan  
FROM t_user  
ORDER BY "id"  
LIMIT 100;  

MOD関数で余剰計算して判定します。

また次回あるそうなので、続くかな。

GCPの各サービスについて ※2016/12/17時点

GCP GoogleCloudPlatform

先日GoogleCloudPlatform(以降GCP)トレーニングツアーに参加してきました。
トップゲートの小林明大さんがGCPの機能やサービスについて解説してくださったので、
簡単にまとめていきます。

GCPを操作するユーザについて


以下の4つがあり、GoogleはOwnerを最低2人に付与することを推奨しているらしい。
* Owner
* Editor
* Viewer
* Billing adminisitrator

API Manager


各サービスのAPIを許可するかどうかを設定できます。
デフォルトで有効になっているものもありますが、無効になっているものもあるので 必要なときは有効にしてあげましょう。

Google APIs Explorer


https://developers.google.com/apis-explorer/#p/

ブラウザでAPIを選択し、値を入れたら使えるというAPI操作をブラウザで設定できます。

Google Cloud Shell


一番上のバーの右側のアイコンから使用できます。
例えば、GoogleComputeEngineを使用する際に、SSHで接続しなくてもその画面でコマンドを実行できます。

AppEngine


  • Standard Environment
    Googleが指定した言語で、Googleが用意したコンテナの中で実行します。
    負荷が上がればオートスケーリングしてくれます。
    作成したバージョンごとにリクエストの割合に応じてリリースすることもできます。
    (例: リクエストの30%は開発版、70%は最新安定版のような使い方が可能)

  • Flexible Environment
    言語の制約がありません
    ミドルウェアの操作がしたい時に使用します。
    こちらもコンテナで動いてます。
    1VM 1コンテナで動いているため、スケールアウトの動作はStandard Enviaronmentよりは遅いです。

Endpoints


APIを自動生成してくれるツールです。
APIを構築する時、トラブル発生時の問題の切り分けも分かりやすいです。

Datastore


AppEngineのDBを外出ししたサービスです。
NoSQLでKey-Value型です。

Strage


ObjectStrageです。 AWSのS3と同じです。
CloudStorageFuseというツールを使ってマウントも可能です。
バケットはリージョン毎でもマルチリージョンでも利用可能です。
Cloud Storage Transfer Serviceを使ってAWSのS3から転送することも可能です。
一度バケットを作成してしまうとプランを変更できないので、プランを変更したいときに既存のデータを別のプランのバケットへ転送する際にも使えます。
オフライン メディアのインポートとエクスポートもありますが、利用できるサービスプロバイダがかなり限られています。

Bigtable


NoSQLです。
get, putはめちゃ早いです。
HBaseとの互換性があります。
HadoopでHbase使ってたら移行しやすいらしい。
GmailとかGoogleAnalyticsの裏側で使われてるそうです。

SQL


MySQLGCPで使うサービスです。

Container Engine


KubernetesっていうDockerコンテナのオーケストレーションツールを使ってコンテナを管理する仕組みになってます。
Borgっていうクラスタマネージャから作ったそうです。

Compute Engine


メンテナンス時はGoogleの人が勝手に他のサーバに移動してくれて、ユーザは何も気せず利用できます。 勝手に停止していた場合は、自動的に起動してくれます。 分単位の課金で1度起動すると最低10分は費用が発生します。

継続利用割引というものがあり、 同じマシンタイプを使い続けると最大30%お得になります。

料金周りについてはこちら
https://cloud.google.com/compute/pricing

インスタンス作成時に可用性ポリシーからプリエンプティブを選択すると、 24時間以内に必ずシャットダウンする仕様のインスタンスが作成されます。 その代わりかなり安く利用できます。

Cloud Interconnect


GCPとデータセンター等のオンプレサーバーとを接続する時に使用します。

Cloud CDN


Googleのエッジポイントを使用して、HTTPのコンテンツをキャッシュすることで、高速にコンテンツを配信できるよになります。

Stackdriver


監視ツールです。
AWSの監視もできます。
Agentを入れれば、詳細を見ることもできます。
Debuggerを使ってクラウド上でデバッグもできます。

Deployment Manager


yamlで書く構成管理ツールです。
AWSでいうCloudFormationです。

Source Repositories


非公開のGitホスティングサービスです。
Stackdriverと一緒に使ってソースをデバッグすることもできます。

Funtions


javascriptで書くサーバレスなサービスです。
AWSでいうLambdaと同じです。

BigQuery


膨大なデータに対してクエリを投げて短時間でレスポンスが返ってくるというビッグデータ解析サービスです。
AWSのRedshiftに近いけど、運用作業がほとんど必要ないのが特徴です。

Pub/Sub


非同期メッセージングサービス
アプリケーション間でメッセージ送受信を行います。

Dataflow


プログラミングモデルのマネージドサービス
JavaPythonで書けます。
必要なインスタンスは勝手にスケールしてくれるので、運用が楽ちんです。
使い終わったらインスタンスをシャットダウンしてくれるので無駄な費用がかかりません。

Dataproc


Hadoopクラスタをプロビジョニングするサービス。
Hadoopのオートスケールはしてくれませんので注意が必要です。
使い終わったら自分でインスタンスをシャットダウンしないといけません。

Datalab


データを分析してグラフ化したりするツールです。
Jupyterという、プログラムを実行して結果を記録しながらデータの分析作業を行うツールを使って作られたサービスです。

Machine Learning Platorm


Tensorflowを使って得たアルゴリズムを使ったサービスです。

★おまけ

Googleが提供してるAPIの中には、以下のようなMachineLearningから作られたAPIがあります。

  1. Vision API
    画像判定してくれるAPIです。

  2. Speech API
    しゃべったデータを文字に変換してくれるAPIです。

  3. Tranlate API
    翻訳サービスのAPIです。

以上です。

Googleのサービスは世界中のたくさんの人が使っていて、各サービスの裏側で動いてるものをGCPとして使えるので信頼性はかなり高いと思います。 今のところAWSの方が知名度が高く、導入事例も多い気がしますが、GCPで構築できるならコスト次第ではありだと思いました。

2016/12/01 AWS re:Invent リリース まとめ

AWS

11/30に続いて12/01にもAmazonが新機能サービスをリリースしたので、簡単にご紹介します。
※11/30分のリリースについては、前回書いたのでご確認くださいませ

  1. AWS CodeBuild
    文字通りAWSでビルドができるよ。
    隔離されたコンテナベースの環境で実行。
    これでローカルでビルドして本番環境でビルドしたら動かないなんてことが回避できますね。

  2. VPCでのEC2インスタンスIPv6対応
    S3、CloudFront、WAF、Route53に続いて、VPCとEC2インスタンスIPv6対応。

  3. AWS Shield
    DDoS攻撃からアプリケーションを保護。
    ELB、CloudFront、Route53と連携して動作。
    AWS WAFから利用できます。

  4. AWS Step Functions
    ビジュアルワークフローを使って、ビジュアライズなワークフローを使用して、分散アプリケーションとMicroservicesのコンポーネントを簡単にコーディネートできるサービス。
    イメージしにくいですが、Lambdaなどの各ファンクションを状態として、状態遷移図をお絵かきしてファンクションの実行順序や条件を制御できるそうです。

  5. Amazon Pinpoint
    Push通知サービス。

  6. AWS Batch
    バッチ処理をフルマネージドで提供するサービス
    ジョブのコードはRubyPython、Node、またはBashスクリプトで可能。

  7. AWS Personal Health Dashboard
    ダッシュボードの右上のアカウントの左側にアラートアイコンが増えてる!?
    利用してるサービスの状態に変化が会った際にはアラートを自動的に表示してくれるようになりました。

  8. Blox
    ECSのためのオープンソーススケジューラ
    イベントストリームを処理してクラスタの状態を追跡し、状態をREST APIで利用可能にするサービス

  9. AWS X-Ray
    アプリケーションモニタリング
    EC2、ECS、ElasticBeanstalk、Lambdaでデーモンを起動します。
    表示されてた画面はSFっぽくてかっこいい!

  10. Amazon EC2 Systems Manager
    新しいEC2やオンプレミスサーバを管理するサービス
    コマンド実行、状態マネージャ、インベントリ、メンテナンスウィンドウ、パッチマネージャ、オートメーション、パラメータストアがあるそうです。
    EC2の画面の一番下に追加されてるー

  11. AWS Lambda に C# が追加
    ただそれだけなんですけどね・・・

  12. AWS OpsWorks For Chef Automate
    Chefサーバを簡単に作成します。
    EC2が展開され、自動でChef Serverがインストールされるみたいです。

  13. AWS Lambda@Edge
    Lambda関数をCloudFrontのイベント発生時に起動させることが可能に。

  14. AWS Glue
    S3、RDS、Redshiftと統合して、データを抽出し、加工し、データベースに書き出すサービス(ETLサービス)です。
    ETLジョブをスケジュールして実行します。

イベントの現場では発表時どんな反応だったのか見たかったなぁ・・・

2016/11/30 AWS re:Invent リリース まとめ

AWS

Amazonが11/30のAWS re:Inventカンファレンスでめっちゃリリースがありました。
簡単にまとめていきます。

  1. Amazon Anthena
    S3に保存してるデータを標準SQLで分析できるサービス。 サーバレスアーキテクチャ
    管理コンソールを使うかJDBC接続で利用可能。

  2. Amazon EC2 Elastic GPUs
    既存のインスタンスタイプにGPUを追加できる!
    既存でもG2、P2インスタンスGPUを利用できましたが、フレキシブルにグラフィック性能を決めれます。

  3. F1インスタンスの追加
    FPGAを使えるそうです。
    いまいちわかってないですが、自分で論理回路を変更できることっぽい?

  4. インスタンスタイプ色々
    特に目に止まったのだけ挙げると
    R4インスタンスでネットワーク帯域10Gbpsと20Gbpsをサポート!

  5. AWS Snowmobile
    エクサバイト級のデータを持ってるユーザからすると、AWS Snowballだけじゃデータ移行するのに時間がかかるということで、 最大100PBのデータ移行を複数台で可能に。

  6. AWS Snowball Edge
    Snowballの拡張版。100TBのストレージ。
    クラスタリング可能。S3とNFSをストレージエンドポイントに設定可能。
    LambdaファンクションでS3バケットに対してアップロードされたデータを処理可能。

  7. Amazon Lightsail
    AWSVPSです。
    月額$5からの定額料金です。

  8. AuroraでPostgreSQL互換対応
    AuroraでPostgreSQLに対応しました!

  9. Amazon Rekognition
    ディープラーニングを使った強力な画像分析を可能にしたサービス

  10. AWS Greengrass
    バイスに組み込んで製造し、AWS IoTとLambda上で実行されるサービス。
    IoTなどのデバイスのローカル上で処理させたいときに使うっぽい。

  11. Amazon Polly
    テキスト読み上げサービス。
    24の言語と47の音声が含まれている。
    オーディオファイルとして保存も可。

  12. Amazon Lex
    対話的音声&テキストインターフェース
    簡単にいうと音声チャットbot
    現在はFacebook Messengerと接続できる。
    SlackとTwilloは現在作業中とのこと。

  13. AWS Organizations
    AWSアカウントを複数使用している場合に、管理を簡単にできるサービス。
    現場では、開発用と本番用とでアカウントを分けて使用する場面があるので、そういう場合に便利。
    料金の一括請求とかもできます。

以上です。
不足してる情報もあるかと思いますが、気になる方は調べてみてください。

Bash on Windowsでエラー音がうるさい

Win10 小ネタ Windows10

Bash on Windowsで開発やるぞ!
と触ってたらエラー音が気になってしょうがなくなったので、この音だけを消す方法をまとめます。

vi ~/.inputrc

set bell-style none

上記を記述して保存して、Bashを再度立ち上げたら音が消えた!

これで静かに作業ができるー
ε-(´∀`*)ホッ

参考サイト様

d.hatena.ne.jp

RDSのスナップショット一覧を100個以上取得する(LambdaのPython編)

AWS Lambda RDS

RDSスナップショットを取得するのに、
describe_db_snapshots()
をすると100個までしかデフォルトでは取得できません。

もし手動でスナップショットを取得して100個以上になった場合は、
describe_db_snapshots()
をする際に"Marker"という値が発行されるので、そいつを引数として渡してやる必要があります。

今回はLambdaを使って発動するように作ります。
言語はPythonです。

※取得部分だけ記載します。

# 100個の生データを取得します。  
rds = boto3.client('rds')  
row_snps = rds.describe_db_snapshots()  
  
# スナップショット一覧のみ取り出します。  
snapshots = row_snps['DBSnapshots']  
  
# 生データを取得した項目にMarkerのキーがあれば、取得し続けるように回します。  
while "Marker" in row_snps:  
  
    # Markerの値を保存します。   
    mark = row_snps['Marker']

    # Markerの値を使って次の100個の生データ一覧を取得します。
    row_snps = rds.describe_db_snapshots(Marker=mark)

    # 初回のスナップショット一覧に今回取得したスナップショットのデータを結合します。
    snapshots = snapshots + row_snps['DBSnapshots']

これでsnapshotsに100個以上全てのスナップショット一覧が格納されます。

Oracle Database 11g Express Editionのインストール @CentOS 6.8

はじめに

Oracle Database 11g Express Edition は無償で使えるOracle Databaseです。 他のバージョンは有償なのでテストで使用したい場合は助かります。

今回はOracle DatabaseをCentOS 6.8にインストールして、 クライアント(Windows10)から接続テストを行うところまでをまとめました。


ダウンロードとインストール

下記URLにアクセスし、「ライセンスに同意する」を選択し、「Oracle Database Express Edition 11g Release 2 for Linux x64」をダウンロードします。
http://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/index.html ※サインインを求められるので、Oracleプロファイルを持ってない方はプロファイを作成しサインインしてください。

ダウンロードしたらVMware上のサーバーにSFTPで送り、unzipコマンドで解凍します。

f:id:the-casket-of-star:20160926144331p:plain

  
# 開発用パッケージをインストール  
yum groupinstall "Development Tools"  
  
# bcが必要なので、インストールします。  
yum –y install bc  
  
cd Disk1  
rpm –ivh oracle-xe-11.2.0-1.0.x86_64.rpm  

f:id:the-casket-of-star:20160926144541p:plain

※SWAPが2GB未満で失敗した場合

``

swapが2GBないと失敗します。 失敗した場合は、swap領域を増やしてください。
参考URL:
https://www.nextrevo.jp/iij-gio/gio-p2%E3%81%AEcentos%E3%81%A7swap%E9%A0%98%E5%9F%9F%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B/

# mountコマンドで / のパーティションを確認  
mount

# swap領域1GB追加
fallocate -l 1G /swapfile.img
chmod 600 /swapfile.img
mkswap /swapfile.img

# 起動時にswap領域有効化
vi /etc/fstab
------------------------------
# 一番下に以下を追加
/swapfile.img swap swap default
------------------------------

初期化

下記のコマンドを実行します。 基本的にはパスワード入力以外はEnterで問題無いです。

/etc/init.d/oracle-xe configure

f:id:the-casket-of-star:20160926160506p:plain


設定

# 共有ライブラリを設定します。
vi /etc/ld.so.conf.d/oracle.conf
# 以下を記載
----------------------------------
/u01/app/oracle/product/11.2.0/xe/lib
----------------------------------


# 設定したファイルを反映
ldconfig

# 設定ファイルが反映されたか確認
ldconfig –v
/u01/app/oracle/product/11.2.0/xe/lib:
が記載してあればOK

# クライアントユーザーの環境設定
# su - oracle
-bash-4.1$ cp /etc/skel/.bash_profile /u01/app/oracle/ 
-bash-4.1$ cp /etc/skel/.bashrc /u01/app/oracle/
-bash-4.1$ vi ~/.bashrc
--------------------------------------------------
# 一番下に以下を追記
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
--------------------------------------------------

f:id:the-casket-of-star:20160926160650p:plain

# systemでの接続テスト sqlplusコマンドでOracleに接続テストします。 ユーザー名はsystem パスワードは初期化コマンド “/etc/init.d/oracle-xe configure” 実行時に入力したものです。

f:id:the-casket-of-star:20160926160742p:plain

# 環境変数の設定
vi /etc/profile
# 最終行に以下を追加
=====================================================
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export ORACLE_BASE=/u01/app/oracle
=====================================================
# 即時反映
source /etc/profile

# listener.oraの設定
cd $ORACLE_HOME
vi network/admin/listener.ora
===============================
# listener.ora Network Configuration File:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = XE.cacti-PC)
      (SID_NAME = XE)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
    )
  )

LISTENER =
 (DESCRIPTION =
   (ADDRESS_LIST=
      (ADDRESS = (PROTOCOL = TCP)(HOST = cacti-PC)(PORT = 1521))
   )
 )
===============================

# local_listenerの設定
sqlplusコマンドでOracleに接続します。
 sudo su oracle
 cd $ORACLE_HOME
 bin/sqlplus /nolog
SQL> conn / as sysdba
SQL>show parameter local listener;

local_listenerのVALUEの項目に何も表示されていなければ、
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=サーバーのホスト名)(PORT=1521))';
で入力。

# iptablesの設定
vi /etc/sysconfig/iptables
# 以下を追記
===============================================================
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT
===============================================================

# リスナーの起動
f:id:the-casket-of-star:20160926160820p:plain


クライアント側の設定

ダウンロードとインストール

下記のURLへ行き、バージョンに合わせてダウンロードします。
今回は、ローカルマシンがWindows 10 x64なので、”Instant Client for Microsoft Windows (x64)”を選択します。
http://www.oracle.com/technetwork/jp/topics/index-099943-ja.html

f:id:the-casket-of-star:20160926161101p:plain

“こちら(USサイト)”をクリックします。

f:id:the-casket-of-star:20160926161125p:plain

Accept License Agreementを選択し、
Instant Client Package – Basic
Instant Client Package – SQLPlus
Instant Client Package – ODBC
のパッケージをダウンロードします。

f:id:the-casket-of-star:20160926161209p:plain

全て解凍すると同じフォルダの中に入ります。
例:Version 12.1 の場合 → instantclient_12_1
フォルダ名をわかりやすいように「oracle」に変えます。
これを好きな場所に置いてください。
今回は自分のUserフォルダ直下に置きました。(C:\Users\d-furukawa\oracle)

設定

システム環境変数のPathに先ほど設置したフォルダパス(C:\Users\<User名>\oracle)を登録します。
f:id:the-casket-of-star:20160926162835p:plain

同様に
変数名TNS_ADMINを新規に追加し、同じフォルダパスに続けて、tnsnames.oraを値に入力して[OK]をクリックします。
※tnsnames.oraは後ほど作成します。

f:id:the-casket-of-star:20160926162902p:plain

変数名NLS_LANGを新規に追加し、JAPANESE_JAPAN.JA16SJISTILDEを値に入力して[OK]をクリックします。

f:id:the-casket-of-star:20160926162918p:plain

# hostsの設定
C:\Windows\System32\drivers\etc\hosts
をエディタで開きます。
※私は、Visual Studio Codeで開いています。
下記の用に最後にサーバーのIPアドレスとホスト名を記述します。
f:id:the-casket-of-star:20160926162958p:plain

# ODBCドライバのセットアップ
次にODBCドライバのセットアップを行います。
コマンドプロンプトを起動し、作ったoracleフォルダに移動します。
"odbc_install JA"と入力して、Enterで
"Oracle ODBC Driver is installed successfully"
と表示されれば完了です。

# tnsnames.oraの作成
Oracleデータベースに接続するための接続情報を記述したファイルが必要です。
以下のファイルを環境変数TNS_ADMINに設定したフォルダの中に設置します。
ファイル名:tnsnames.ora
1行目は任意の名前を入れます。
HOSTには、サーバーのIPアドレスまたはホスト名を記述します。
SERVICE_NAMEには、サーバのlistener.oraで書いたSID_NAMEの値と同じにします。
※これがあってないと接続できません。理解するのにかなり時間がかかりました。
※XEは初期で作られているSERVICEです。

f:id:the-casket-of-star:20160926163156p:plain

コントロールパネル→管理ツール→ODBCデータソース(64ビット)を起動します。
※管理者権限で起動してください。

f:id:the-casket-of-star:20160926163221p:plain

追加をクリックします。

f:id:the-casket-of-star:20160926163502p:plain

Oracleのドライバーを選択して、[完了]をクリックします。
※人によって、名称が違うみたいです。
f:id:the-casket-of-star:20160926163518p:plain

データソース名は自分で決めてください。
TNSサービス名は、tnsnames.oraの1行目で書いた値を設定します。
f:id:the-casket-of-star:20160926165149p:plain

# 接続テスト  
sudo su oracle
cd $ORACLE_HOME/bin
sqlplus system/<パスワード>@XE

SQL> create role developer identified by developer;
SQL> create table emp
  2  (
  3  emp_id char(3),
  4  emp_name varchar2(10),
  5  primary key(emp_id)
  6  )
  7  ;

確認

f:id:the-casket-of-star:20160926165226p:plain

以上