AWSを使った「なろう」をPollyで朗読させる

niwanos.hatenablog.com 前回は「なろう」WebAPIを作りましたが、今回はAWSの読み上げサービスPollyで 取得したチャプターを読み上げた音声ファイルをS3に保存してみます。 aws.amazon.com const axios = require('axios') const cheerio = require('cheerio…

AWSを使った「なろう」WebAPIの作成

「蜘蛛ですが何か?」が面白いと妻から聞いたので「なろう」のWebAPIをAWSで作ってみました。 構成 CloudFront=>APIGateway=>Lambda=>SocksProxy=>なろうサイト CloudFront キャッシュサーバ SocksProxyを経由したために遅くなったレスポンスの改善&なろう…

javascriptでobjectのpathを列挙するサンプル

javascriptでObjectを全部舐めてpathを全て列挙する必要があったのでサンプルを作成してみました。 パス列挙関数 /** * オブジェクトを再帰で探索し全ての終端までのパスをドット区切りで列挙 * @param {object} obj 探索対象Object * @param {string} path …

with句の再帰問合せを利用した抜け番検索

Oracle WITH句で再帰問合せができると聞いたので 抜け番検索を作ってみました。 http://www.oracle.com/technetwork/jp/articles/otnj-sql-image7-1525406-ja.html#cまず抜け番のあるテーブルレコードを作成。 create table test(num number); insert into t…

SQLLoaderのCTLファイル作成Function

tsv用 CREATE OR REPLACE FUNCTION MAKE_CTL ( P_TABLE_NAME IN VARCHAR2 ) --RETURN CLOB RETURN VARCHAR2 IS CURSOR CUR_TABLE_COLUMN(V_TABLE_NAME VARCHAR2) IS SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = V_TABLE_NAME; -- CTL_STR …

TYPEのMEMBER FUNCTION PROCEDURE を使ってVARCHAR2をラッピングしてみた

sqlloader用のctlファイル作成function tsv用 CREATE OR REPLACE FUNCTION MAKE_CTL ( P_TABLE_NAME IN VARCHAR2 ) --RETURN CLOB RETURN VARCHAR2 IS CURSOR CUR_TABLE_COLUMN(V_TABLE_NAME VARCHAR2) IS SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE T…

TYPEのMEMBER FUNCTION PROCEDURE を使ってVARCHAR2をラッピングしてみた

CREATE OR REPLACE TYPE STRING_TYPE AS OBJECT ( STR VARCHAR2(4000) ,MEMBER FUNCTION LEN RETURN NUMBER ,MEMBER FUNCTION SUBSTRING(S IN NUMBER,L IN NUMBER) RETURN VARCHAR2 ,MEMBER PROCEDURE PRINT ) / CREATE OR REPLACE TYPE BODY STRING_TYPE AS…

遅延制約

OracleMasterSilverの勉強していて始めて知った遅延制約を試してみた。 CREATE TABLE deferred_test ( id NUMBER NOT NULL ,name VARCHAR2(100) NOT NULL ); ALTER TABLE deferred_test ADD CONSTRAINT pk_deferred_test PRIMARY KEY (id); INSERT INTO defe…

CSVを作成するためのSQLを生成するFunction

CREATE OR REPLACE FUNCTION MAKE_CSV_SQL ( p_table_name IN VARCHAR2 ) RETURN VARCHAR2 IS CURSOR cur_columns(v_table_name VARCHAR2) IS SELECT * FROM user_tab_columns WHERE table_name = v_table_name ORDER BY column_id; v_sql_text VARCHAR2(400…

sqlplus WHENEVER SQLERROR を検証

id:yohei-a に WHENEVER SQLERROR について聞いたので試してみました sqlplus内で起きたsqlエラーをどのように処理するか(exit or continue)とか エラー時にトランザクションをどうするか(commit or rollback ) を指定できます。 まともにsqlplus使うつ…

テーブル定義書をpl/sqlでつくってみた

SET SERVEROUT ON SIZE 1000000 SET LINESIZE 1000 DECLARE CURSOR table_cur IS SELECT t.table_name AS table_name ,tc.comments AS comments FROM user_tables t LEFT JOIN user_tab_comments tc ON t.table_name = tc.table_name ORDER BY t.table_name;…

ストアドプロシージャのパラメータnocopyについて

http://www.shift-the-oracle.com/plsql/subprogram-parameter-mode.html 上記のサイトをみててORACLEでは参照渡ししているわけではないことを初めて知った。 参照渡しするにはnocopyヒントを付ける必要があるとのこと。参照渡しならば、メモリ食わなくてす…

動的SQL実行プロシージャ

INDEX の REBUILD などをPLSQLで実行するときは execute immediateだとddlの実行ができないので 通常はDBMS_SQLパッケージを使用するとおもいますが なんかSQL実行したいだけなのにいろいろと記述しなきゃいけなくて めんどくさいのでSQL投げたら実行してく…

ホットペッパーのWebAPIを使用してHTTPからXML取得、パースするプロシージャ

DBMS_XMLDOMでxmlのパースしてみたかったので UTL_HTTP使ってWebAPI叩いてXML取得、パースするプロシージャを作ってみました。 ホットペッパーに怒られないか心配ですが(汗 CREATE OR REPLACE PROCEDURE XML_PARSE_TEST IS FUNCTION GET_XML(URL IN VARCHAR…

便利なサブプログラム

http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19257-01/subprograms.html#1225↑を見てみると、FUNCTION、PROCEDUREの中にサブプログラムの定義ができることが書いてありました。実際に触ってみた。 CREATE OR REPLACE P…

オラクルでメールを送ってみる

oracleのマニュアルみながらutl_smtpパッケージ使って id:yohei-aにメールを送ってみたw DECLARE c UTL_SMTP.CONNECTION; PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS BEGIN UTL_SMTP.WRITE_DATA(c, name || ': ' || header || UTL_TC…

ネスト表を使ってみた

テーブルのカラムにテーブルが作れるらしいので試してみました。 下記の親子関係のテーブルをネスト表に書き換えてみます。 CREATE TABLE CUSTOMER ( ID NUMBER NOT NULL, NAME VARCHAR2(100), CONSTRAINT PK_CUSTOMER PRIMARY KEY (ID) USING INDEX ); / CR…

11gで追加された一時表領域の縮小 alter tablespace 〜 shrink space keep 〜M

10gまでは一時表領域が大変なことになったときには 新しく一時表領域のデータファイル追加して、スイッチして消して、、、、 みたいなことをしてましたが、 11gから一時表領域の縮小コマンドが追加されました。 alter tablespace [一時表領域名] shrink spac…

11gで追加された仮想列をつかってみた

会社のPCに11gインストしたのでいろいろ試してみる。、今回試したのは仮想列(VirtualColumn) 別カラムの内容を参照して加工できる、そして実体はなし!金額と消費税のテーブルで仮想列で税込金額をつくってみた。 CREATE TABLE VIRTUAL_COLUMN( AMOUNT NUM…

11gで追加されたConnectionPoolを試してみた

DRCPというらしいです http://www.ujp.jp/modules/d3blog/details.php?bid=476&cid=47 http://www.oracle.com/technology/global/jp/tech/oci/pdf/oracledrcp11g.pdf設定は簡単です DBにsysで入って dbms_connection_pool.start_pool(); って打つと起動しま…

OracleMaster11g Bronzeを取得しました

先週の土曜日に「Bronze DBA11g」をゲットしBronzeになれました。 6年前くらいに旧制度のOracle9iSilverを取得していたので 9iFellowを申請して、11gのDBAをとって11gBronzeとしました。久しぶりにOracleMasterの勉強をしていて思ったのは、、、 やはり問題…

SelectInsertのデバッグがメンドイとき

SelectInsertするときにInsert先のテーブルにPK、UK、FK、NOTNULL制約などが張ってあって Insertに失敗すると結構ストレスがたまります。 そもそもどのレコードで失敗したのかわからなかったりすると NotNullだったらSelectのWhereにIS NOT NULLかいて探した…

BYPASS_UJVC

仕事でselectupdateをすることがあって、 副問い合わせに対してUPDATE出来たら楽だなと思ってたら ORA-01779が出てしまったので調べてたらhttp://emboss.blog28.fc2.com/blog-entry-13.htmlみたいにヒント句で回避できるらしい ってことで出来ることはわかっ…

自律型トランザクションのサンプル(AUTONOMOUS_TRANSACTION)

PL/SQLでログを取りたい場合とかに実プログラムのトランザクションとは別で ログ用のトランザクションを作成したいときとか結構あると思います。 そんなときはAUTONOMOUS_TRANSACTIONを使うと自律型トランザクションを実装出来ます。 サンプルを書きました。…

スキーマ(ユーザ)同士の定義比較

開発と本番でスキーマが分かれていてテーブル定義に差異が出てしまうことって時たまあるとおもいます。 で、その差異を洗うにはこんな感じの一発で差異がとれたりします。たとえば current_schema history_schema っていう2つのスキーマがあってcurrent_sche…

最大値のレコードを取得する方法 その2

以前 http://d.hatena.ne.jp/niwanos/20090501/1241195931 みたいに最大値のレコード取得の方法を書いてましたが Oracleのマニュアルにこれよりもスマートな方法が書いてあったのでちょっと紹介します。前回は SELECT LOG.* FROM LOG_TABLE LOG WHERE LOG.ID…

LAG関数、LEAD関数

OracleにはLAG、LEAD関数というものがあります。 何ができるかというと、、、 ソートしたレコードの前or後のデータを参照できます。なにに使うんだろうとちょっと考えてみたんですが、 前月差などを取るときに使えそうです。 こんな感じ テーブル定義 CREATE…

最大値のレコードを取得する方法

自分はこの方法しか知らないので知ってる人は是非教えてほしいところですが。1テーブル内で、履歴的な管理をしているときに たとえば↓みたいなテーブルがあって CREATE TABLE LOG_TABLE ( ID NUMBER ,LOG_ID NUMBER ,NAME VARCHAR2(20) ,REGISTER_DATE TIMES…

shrink space

大量のDELETEを走らせたのに表領域が解放されない場合は ALTER TABLE テーブル名 SHRINK SPACE; で10gからは postgresのバキューム的なことが出来ます。 ただしテーブルの行が移動してもよいということをテーブル単位で指定しないとエラーが発生します。 ALT…

ユーザのオブジェクトをすべて削除したいとき

Oracleの場合はユーザのオブジェクトを一気にすべて簡単に消す何かはありませんので 自分でpl/sqlでも書いて消す必要がありますやりかたとしては SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTSでユーザが持ってるオブジェクトを選択してDBMS_SQLとかつ…