[OCI] PL/SQL SDKを使ってAutonomous DatabaseからPL/SQLでMySQL DBシステムを作成してみた

# はじめに

記事のタイトルを見て、「ちょっと何言ってるかわかんない©️サンドウィッチマン」と思われた方もいらっしゃるかと思いますが、実際にタイトル通りの内容ですのでご容赦ください。

こちらの記事で、PL/SQL SDKを用いて、Autonomous Database内でPL/SQLからOCIの操作ができるようになったことを紹介しました。

[Autonomous DatabaseでOracle Cloud Infrastructure SDK for PL/SQL a.k.a. PL/SQL SDKを使ってみた](https://qiita.com/500InternalServerError/items/b7aba5d96c6c7b5e186b)

上記の記事では、PL/SQL SDKを使ってオブジェクト・ストレージのバケット内のオブジェクト名を取得しただけでしたが、今回はなんとAutonomous DatabaseからPL/SQL SDKを使ってMySQL DBシステムを作成してみたいと思います。
（実際にそんなことをする人がいるかどうかはさておき…。）

# やってみた

いきなりですが以下がMySQL DBシステムを作成するPL/SQLプログラムです。
こちらをSQL Developer Webから実行します。

※事前にこちらの記事などを参考にして、適切なMySQL DBシステム用のネットワークの作成をしてください。
[OCIのネットワークを構成する際に手戻りの少ない手順を考えてみる（初心者向け）](https://qiita.com/500InternalServerError/items/ce8aaf7d1c249126d345)

```
set serveroutput on
DECRARE

  response_body     dbms_cloud_oci_ms_db_system_db_system_t;
  response          dbms_cloud_oci_ms_db_system_create_db_system_response_t;
  db_system_details dbms_cloud_oci_ms_db_system_create_db_system_details_t;
  json_obj          json_object_t;
  l_keys            json_key_list;

BEGIN
 
  --作成するMySQL DBシステムの設定内容
  db_system_details := dbms_cloud_oci_ms_db_system_create_db_system_details_t();
    -- 表示名
    db_system_details.display_name := 'MySQL1';
    -- シェイプ
    db_system_details.shape_name := 'VM.Standard.E2.1';
    -- 構成のOCID
    db_system_details.configuration_id := 'ocid1.mysqlconfiguration.oc1..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
    -- コンパートメントのOCID
    db_system_details.compartment_id := 'ocid1.compartment.oc1..XXXXXXXXXXXXXXXXXXXXXXX';
    -- サブネットのOCID
    db_system_details.subnet_id := 'ocid1.subnet.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXX';
    -- アベイラビリティ・ドメイン
    db_system_details.availability_domain := 'FEnn:AP-TOKYO-1-AD-1';
    -- DB管理者のユーザ名
    db_system_details.admin_username := 'admin';
    -- DB管理者のパスワード
    db_system_details.admin_password := 'Demo#1Demo#1';
    -- データ容量の指定（GB）
    db_system_details.data_storage_size_in_g_bs := '50';
    -- 説明
    db_system_details.description := 'Created by Autonomous Database using PL/SQL SDK';

-- MySQL DB Systemの作成
  response := DBMS_CLOUD_OCI_MS_DB_SYSTEM.CREATA_DB_SYSTEM(
                create_db_system_details => db_system_details,
                -- 使用するクレデンシャル
                credential_name => 'MY_SDK_CRED',
                -- リージョン
                region => 'ap-tokyo-1');
 
  response_body := response.response_body;
 
  -- レスポンスヘッダの表示
  dbms_output.put_line('Headers: ' || CHR(10) ||'------------');
  json_obj := response.headers;
  l_keys := json_obj.get_keys;
  for i IN 1..l_keys.count loop
     dbms_output.put_line(l_keys(i)||':'||json_obj.get(l_keys(i)).to_string);
  end loop;
 
  -- レスポンスのステータスコードの表示
  dbms_output.put_line('Status Code: ' || CHR(10) || '------------' || CHR(10) || response.status_code);
  dbms_output.put_line(CHR(10));
 
  -- 実行結果の表示（作成されるMySQL DBシステムのOCIDと表示名）
  dbms_output.put_line('Now Creating MySQL DB System');
  dbms_output.put_line('OCID :'||response_body.id);
  dbms_output.put_line('Display Name :'||response_body.display_name); 

END;
/
```
実行結果です。

```
Headers: 
------------
Connection:"close"
Date:"Thu, 29 Oct 2020 07:01:40 GMT"
opc-request-id:"OS6LIUJ12B/4CDC725A0B9944E5A65D8A00FF5C8B57/4939D58AC27899C0E84E
2CA33F9CF1C5"
Content-Type:"application/json"
X-Content-Type-Options:"nosniff"
Content-Length:"1817"
Status Code: 
------------
200


Now Creating MySQL DB System
OCID:ocid1.mysqldbsystem.oc1.ap-tokyo-1.aaaaaaaag36nvw6tzavpplzar5xkjus4ls7tvixmno6lc7vdhrfddt26j3lq
Display Name :MySQL1


PL/SQL procedure successfully completed.

Elapsed: 00:00:02.512
```

 PL/SQLの実行が無事完了しました。

そしてコンソールを見てみると…。
![スクリーンショット 2020-10-29 16.22.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/eee55351-f7ac-dcff-7ebc-ff2f3d29ffbc.png)
なんと！
![スクリーンショット 2020-10-29 16.22.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/07ce17d0-1b08-3756-d06e-1eccde036aad.png)
My SQL DBシステムが作成中になっています！
![スクリーンショット 2020-10-29 16.23.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/34c23176-675f-4860-2a84-37bc11f2aa87.png)
先ほどのPL/SQLプログラムの

```
db_system_details.description := 'Created by Autonomous Database using PL/SQL SDK';
```
の部分で指定した説明（description）もきちんと反映されていますね。

めでたし、めでたし。

こちらにPL/SQL SDKに対応しているOCIのサービスリストがありますので、皆さんもいろいろ試してみてはいかがでしょうか。
[Oracle Cloud Infrastructure Documentation PL/SQL SDK](https://docs.cloud.oracle.com/en-us/iaas/Content/API/SDKDocs/plsqlsdk.htm)