2010-01-01から1年間の記事一覧

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かいて探した…