2016/12/02

システム内製を極める

システムの内製を推進したいと思い購入。
やはり、内製がいいんじゃないかと、内製を勧めている本をよんで改めて思う。
内製押しの本なので、良いこと書いてあるに決まっているのだが、こちらが正解ではと思う。

開発・改良の切り札 システム内製を極める

2016/11/03

天才

アマゾンのキンドルセールで購入。読了。
田中 角栄ってモノマネのイメージしかなかったけど、日本列島改造論1972年で、その後あれだけ高速道路網、新幹線が整備された事を考えるとすごい影響力を持った政治家だったのだと改めて驚く。


天才 石原慎太郎

2016/11/01

SSISを使って、CSVをSQL Serverへロードしようとしたらエラー

- Issue
  SSIS(SQL Server Integration Services)を使って、CSVをSQL serverへロードしようとしたらエラー




- 原因
 カラム定義 varchar()を、nvarchar()に変更する。
 (テーブルのDROPが必要。)

2016/10/31

インタラクティブレポートの条件付き書式(背景色を変える) その2 - APEX

  • Goal
    以前の記事だと、リンク付きのセルの場合色が変わらないことが発覚!!
    なのでリンク付きのセルの場合でも変更できる方法がこれ。
    インタラクティブレポートにおいて、セルの背景色を条件に応じて変更する。

    (As is) リンク付きのセルは以下のようにセルの色が変わらない。。。


  • How
    1. ソースを見れば、タグTDに、Style属性がセットされていない。なので、動的アクションでの、JAVASCRIPTが原因…


    2. jQueryでの親属性の取得方法を変更する。動的アクションのJavascriptをparent() から、closest()へ変更する。

    // as is
    apex.jQuery("span[data-style]").each(
    function()
    {
    apex.jQuery(this).
    parent().attr( 'style'
    , apex.jQuery(this).attr('data-style')
    );
    }
    // to be
    apex.jQuery("span[data-style]").each(
    function()
    {
    apex.jQuery(this).
    closest('td').attr( 'style'
    , apex.jQuery(this).attr('data-style')
    );
    }

    3. インタラクティブレポートの列属性の設定を変更する(リンク付きの列のみ)

    以下が、結果。画像の背景が白なのは、別の問題…。

2016/10/28

javascriptで他のページにリンクする - 動的アクション - APEX

  • Goal
    ボタン押下時に、WEBDAVのフォルダ内のPDFファイルを立ち上げる
    その時に、テキストボックス(SELECTリスト)の値を引数として使う

    (例) Openボタンをクリックしたら、テキストボックスの "文字列.pdf" を開く
       これは、12345.pdfを開いたイメージ


  • How
    ボタンにダイナミックアクションを設定し、Javascriptで開く
    ダイナミックアクションのJavascriptの例は以下の通り

    //同じスクリーンに表示させる
    window.location.href = 'http://XXXXXXX/XXXXXX/XXXXX/'+ document.getElementById('P13_X').value+'.pdf';
    //新しいWINDOWに表示させる
    window.open('http://XXXXXXX/XXXXXX/XXXXX/'+ document.getElementById('P13_X').value+'.pdf');
    view raw file_open.js hosted with ❤ by GitHub

2016/10/27

SSIS (SQL SERVER Integration Services) にアクセスできない

SSIS (SQL SERVER Integration Services) にアクセスできない



- 解決方法
SQL Server Management Studio を アドミンモードで立ち上げる






##実にしょーもないけど、解決に1時間以上かかった。情けない。

2016/09/25

1.他のテーブルとのマッチングのやりかた(1列文字列から1行テーブルへ変換)

目次に戻る
APEXでのCHECKBOX(チェックボックス)の取扱

1.他のテーブル(名称マスター)とのマッチングのやりかた
 (1列文字列から1行テーブルへ変換、その後マッチングしてまた1行文字列に戻す)


 Goal ‐ 以下のように、チェックボックスの返り値とマスターをマッチングをする
 #SQLサンプル
  COLUMN FOODS を FUNCTION T_GET_NAME に渡して、名称リストを取得
select ID
, USERNAME
, FOODS
, T_GET_NAME(FOODS) FOODS_NAME
from T_QA_SAMPLE;
ID USERNAME FOODS FOODS_NAME
--------------------------------------------------------------------------
41 APEX 1:2:4:5:6 Fried Rice, Hamburger, Ramen, Steak, Sushi
1 Toshi 1:2:5:6 Fried Rice, Ramen, Steak, Sushi
21 TEST 1:3:4 Hamburger, Pasta, Sushi
22 TEST2 5:6 Fried Rice, Steak

 #FUNCTION T_GET_NAME のSQL
create or replace function "T_GET_NAME"
(p_text in VARCHAR2)
return VARCHAR2
is
l_codetext varchar2(2000);
BEGIN
SELECT LISTAGG(L.LOOKUP_NAME,', ') WITHIN GROUP (order by null) codetext
 INTO l_codetext
FROM
--- INPUT された p_text を1列テーブルに変換し、テーブルSとする
(WITH TEMP AS (SELECT p_text IN_TEXT FROM dual)
SELECT trim(regexp_substr(IN_TEXT, '[^:]+', 1, LEVEL)) ID_LIST
FROM TEMP
CONNECT BY instr(IN_TEXT, ':', 1, LEVEL - 1) > 0) S
--- 名称マスタ を テーブルL とする
, T_LOOKUPS L
WHERE S.ID_LIST = L.G_SEQ;
return l_codetext;
END;
view raw T_GET_NAME.sql hosted with ❤ by GitHub

 
 #解説 - コロン(:)区切りのテキストを1行テーブルへ変換するSQL
SELECT trim(regexp_substr(<文字列>, '[^<区切文字>]+', 1, LEVEL)) ID_LIST
FROM DUAL
CONNECT BY instr(<文字列>, <区切文字>, 1, LEVEL - 1) > 0;
-- この場合は、文字列が 1:2:5 で、区切り文字が:
SELECT trim(regexp_substr('1:2:5', '[^:]+', 1, LEVEL)) ID_LIST
FROM DUAL
CONNECT BY instr('1:2:5', ':', 1, LEVEL - 1) > 0;
ID_LIST
--------
1
2
5






2016/09/24

CHECKBOX(チェックボックス)のハンドリング - 目次 - APEX


APEX上でのCHECKBOX(チェックボックス)のハンドリング方法


Table of contents
 
1.他のテーブルとのマッチングのやりかた

  (1列文字列から1行テーブルへ変換)
 2.検索する/フィルターをかける


Background

 APEXでチェックボックスを使う、コロン(:)区切りの文字列で値が帰ってくる。
 それをどう扱うのか?というメモ...

 (例)




2016/09/23

インタラクティブレポートのセルをクリック時にポップアップを立ち上げる - APEX

  • Goal
    インタラクティブレポートにおいて、セルのクリック時にポップアップ画面を立ち上げる。

    (例) Name をクリックしたら詳細をポップアップで表示する。




  • How
    1. インタラクティブレポート → レポート属性 → 列属性 → 列リンク

      ターゲット = URL
      URL に Javascript を貼り付ける
      &APP_ID.に違うAPP_ID を指定して飛ばす事もできる

    -- 追記 IEのエラー回避 void(0); を最後つける
    javascript:apex.navigation.popup({"url":'f?p=&APP_ID.:7<ページ番号>:&SESSION.::&DEBUG.:::',"name":"winLov","width":350,"height":400});void(0);
    -- 同一アプリ無いのページ7をPOPUPさせる
    -- 普通バージョン
    javascript:window.open('f?p=&APP_ID.:7<ページ番号>:&SESSION.::&DEBUG.:::','popup1','width=640,height=480,top=0,left=0');
    -- oracle のAPIを使うバージョン
    javascript:apex.navigation.popup({"url":'f?p=&APP_ID.:7<ページ番号>:&SESSION.::&DEBUG.:::',"name":"winLov","width":350,"height":400});
    --
    -- 変数も渡せる :これは、アプリ944ページ1にITEMを渡すサンプル
    javascript:apex.navigation.popup({"url":'f?p=944:1:&SESSION.::&DEBUG.::P1_ITEM:#ITEM#',"name":"winLov","width":700,"height":200});




    2. (追記)IEだと、POPUP表示時に、元の画面の情報が消えるエラーが発生!
      「void(0);」を追記すると解消する



2016/09/21

リージョンタイトルの書式設定 - APEX

  • Goal
    リージョンのタイトルの書式を変更する。文字を大きくしたり、色を変更する。

    (To be 例) USER_ID を追加し、文字を大きくして、太字+色を赤色に変更した例
     


  • As is

    変更前はこんな感じ



  • How
    1. リージョン定義 → タイトル に HTMLを埋め込む。変数も追加できる。

    サンプル
    Change password for <span style="color: red; font-size: large;"><b>&amp;APP_USER.</b></span>


    &APP_USER. はログインユーザーIDを意味する変数


     

2016/08/12

インタラクティブレポートの条件付き書式(背景色を変える) - APEX

  • Goal
    インタラクティブレポートにおいて、セルの背景色を条件に応じて変更する。

    (To be 例) セルの書式を動的に以下の条件で設定する。
      Fare < 30                    緑色
      30 <= FARE < 50      黄色
      50 <= FARE < 70      ピンク色
      70 <= FARE                 赤色+白抜き文字+太字
     


  • As is

    変更前はこんな感じ



  • How
    1. セルの書式を格納するダミーカラムを、インタラクティブレポート内のSOURCEで作成する。レポート属性の列属性は、"非表示"とする。
    今回は、"FARE_COLOR"というカラムを追加。


    select "FARE", --背景色を変えたいカラム名
    --セルの書式用のダミーカラムを作成
    CASE WHEN "FARE" < 30 THEN 'data-style = "background-color:#00CC33"'
    WHEN "FARE" < 50 THEN 'data-style = "background-color:#FFFF33"'
    WHEN "FARE" < 70 THEN 'data-style = "background-color:#FFCCFF"'
    WHEN "FARE" >= 70 THEN 'data-style = "background-color:#FF0000;font-weight:bold;color:#FFFFFF"'
    ELSE 'data-style = "background-color:#FFFFFF"'
    END "FARE_COLOR" -- ダミーカラム名
    from "#OWNER#"."TITANIC"



    2. カラム"FARE"の書式を設定する。
    列属性: FARE > 列の書式 HTML式に以下をセットする。
    <span #FARE_COLOR#>#FARE#</span>



    3. 動的アクションで、Javascriptを実行。



    apex.jQuery("span[data-style]").each(
    function()
    {
    apex.jQuery(this).
    parent().attr( 'style'
    , apex.jQuery(this).attr('data-style')
    );
    }
    );

  • Reference
    #全般
    TBD - APEX and other things

    #データセット
    Titanic: Machine Learning From Disaster

    #アイコン
    フリーアイコン

2016/08/04

RTFファイル内のタグ名が になる - BI Publisher

  • 状況
    Oracle EBSから、XMLPublisherを使ってレポートを取り出す際に、TemplateとしてRTFファイルを作成する。その時、RTFファイルが、XML内のタグ名を正しく保持していないため、レポートが作成されない。(XMLで出力される。

    タグ名が、になっている...

  • 原因
    BI Publisher のセッティングの問題
    #BI Publisher Desktop 11.1.17.150120
  • Solution
    BI Publisherタブの右端の Optionsを開き、Field Labelsを”XML Tag Name"にする

2016/07/09

同一グループ内の1件目を抜き出す SQL


  • Goal
    同一グループ内の一番上のレコードだけをSQLで抜き出す。
    例えば、売上明細から品番別の最も売上件数が多かった年月を抜き出す。
    アウトプットは、<品番>、<最も売上が上がった年月>、<その年月の売上件数>
  • How
    1. 月別に売上件数をサマリー
    2. ROW_NUMBER()で、一番売上件数が多かった月に'1'をセット
    3. ROW_NUMBER()が'1'だけを抜き出す
     
  • Source
    SELECT *
    FROM
    ( select a.*
    , ROW_NUMBER() OVER(PARTITION BY ITEM ORDER BY COUNT DESC, YYYYMM DESC) FLAG
    from
    ( select <ITEM> ITEM
    , to_char(<SALESDATE>,'YYYYMM') YYYYMM
    , count(1) COUNT
    from <SALES>
    group by <ITEM>
    , to_char(<SALESDATE>,'YYYYMM')
    ) a
    )
    WHERE FLAG = 1
    ;


2016/06/26

オブジェクトの名称はすべて小文字にしておくこと - Postgresql

"Postgresqlでは、オブジェクト(テーブル名、カラム名)の名称はすべて小文字にすること"
-理由

 DB内には、大文字・小文字で区別して登録される
 SQL内では、"(ダブルクォーテーション)で囲まれているとそのままの文字列だが、
 囲まれていないと小文字に変換される(らしい)
 結果、アンマッチがおきる


--------------------------------------------------------
testdb=> \d iris
                Table "public.iris"
    Column     |         Type          | Modifiers 
---------------+-----------------------+-----------
 Id            | integer               | not null
 SepalLengthCm | numeric(15,2)         | 
 SepalWidthCm  | numeric(15,2)         | 
 PetalLengthCm | numeric(15,2)         | 
 PetalWidthCm  | numeric(15,2)         | 
 Species       | character varying(20) | 
Indexes:
    "iris_pkey" PRIMARY KEY, btree ("Id")

testdb=> select * from iris where SepalLengthCm > 5.0; -> ダメ
ERROR:  列"sepallengthcm"は存在しません
LINE 1: select * from iris where SepalLengthCm > 5.0;
                                 ^
HINT:  Perhaps you meant to reference the column "iris.SepalLengthCm".
testdb=> select * from iris where "iris.SepalLengthCm" > 5.0;->ダメ
ERROR:  列"iris.SepalLengthCm"は存在しません
LINE 1: select * from iris where "iris.SepalLengthCm" > 5.0;
                                 ^
testdb=> select * from iris where "SepalLengthCm" > 5.0; -> OK
testdb=> select * from iris where iris."SepalLengthCm" > 5.0; -> OK

testdb=> 

雑多な1行コマンド&SQLメモ - Postgresql

メモ for Postgresql

‐Postgresql編

-- テーブル情報の表示
testdb=> \d -- teble 一覧表示
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+------------+----------+--------
public | department | テーブル | toshi
(1 行)
testdb=> \d department -- tableのカラム名/型を表示
テーブル "public.department"
列 | 型 | 修飾語
--------+---------------+----------
id | integer | not null
dept | character(50) | not null
emp_id | integer | not null
インデックス:
"department_pkey" PRIMARY KEY, btree (id)
-- 接続終了
testdb=> \q
-- 設定ファイルの確認
testdb=> SHOW config_file



2016/06/25

Virtualbox上のUbuntu16.4にPostgresql 9.5をインストールする

MACのVirtualbox上のUbuntu16.4にPostgresql9.5をインストールする。
以下のSTEPをサーバー上で行う。(SSHでも可能)
#1# インストール
#2# Postgresqlを開始する
#3# postgresの初期パスワードを設定する
#4# postgres でログインして、DB作成と別userでもログインできるようにする

#5# クライアントからの接続を許可する

# POSTGRESQLのインストールからクライアント接続するまで(ubuntu 16.4 LTS on VIRTUALBOX with MAC)
#1# INSTALL
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install postgresql postgresql-contrib
#2# START
$ sudo /etc/init.d/postgresql start
$ sudo /etc/init.d/postgresql status
#3# SET initial password for postgres
$ sudo passwd postgres
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
#4# login as postgres and create DB and user
$ su - postgres ## userをpostgresに変更する
$ createdb <dbname> ## dbを作成する
$ psql <dbname> ## dbにpostgresでログインする
psql (9.5.3)
"help" でヘルプを表示します.
<dbname>=# create role <username> with login; ## <username>でログインできるようにする
CREATE ROLE
<dbname>=# \q
$ su - <username> ## userを変更する
$ psql <dbname> ## dbに<username>でログインする
psql (9.5.3)
"help" でヘルプを表示します.
<dbname>=>
#5# Allow to access from client
$ vi /etc/postgresql/9.5/main/postgresql.conf ## postgresql.conf のセッティングを変更する
##以下抜粋##
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' ##初期は、クライアントからの接続を許可していないので
##'*’に変更する
##編集終了##
$ /etc/init.d/postgresql restart ## リスタートする
$ vi /etc/postgresql/9.5/main/pg_hba.conf ## pg_hba.conf のセッティングを変更する
##以下抜粋##
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host all all all trust
## これは、ADDRESSにALLをセット、MethodにTrustをセット。これはどの端末からでも
## どのDBへの接続も許可している。
##編集終了##
$ /etc/init.d/postgresql restart ## リスタートする
## このあとクライアントソフトからテストして確認する ##
view raw postgresql.sh hosted with ❤ by GitHub

## pg_hba.confのセッティングについては、以下参考
-postgresqlのページ
https://www.postgresql.jp/document/9.5/html/auth-pg-hba-conf.html

2016/06/17

限界費用ゼロ社会 <モノのインターネット>と共有型経済の台頭

ちょっと興味ありKindle版購入

限界費用ゼロ社会 <モノのインターネット>と共有型経済の台頭





.bash コマンドメモ

.bash のコマンドメモ

#1# bash の種類を確認
$ which bash
/bin/bash
#この結果をスクリプトの一行目に表示する
#!/bin/bash
#2# フォルダの変更
$ cd .. #一つ上のフォルダへ
#3# フォルダの中身を表示
$ ls #ただ表示するだけ
bin drafts pages tmp
$ ls -a #.始まりも表示 隠しファイルも表示
. .. .git bin drafts pages tmp
$ ls -l #リスト表示
total 8
drwxr-xr-x 5 Toshi_Admin staff 170 Jun 14 22:39 bin
drwxr-xr-x 3 Toshi_Admin staff 102 Jun 14 22:17 drafts
drwxr-xr-x 9 Toshi_Admin staff 306 Jun 14 22:15 pages
-rw-r--r-- 1 Toshi_Admin staff 357 Jun 16 22:22 tmp
$ ls -la #リストと隠しファイル表示を同時に実行
total 8
drwxr-xr-x 7 Toshi_Admin staff 238 Jun 16 22:22 .
drwx------+ 7 Toshi_Admin staff 238 Jun 13 22:15 ..
drwxr-xr-x 12 Toshi_Admin staff 408 Jun 16 22:24 .git
drwxr-xr-x 5 Toshi_Admin staff 170 Jun 14 22:39 bin
drwxr-xr-x 3 Toshi_Admin staff 102 Jun 14 22:17 drafts
drwxr-xr-x 9 Toshi_Admin staff 306 Jun 14 22:15 pages
-rw-r--r-- 1 Toshi_Admin staff 357 Jun 16 22:22 tmp
#4#ファイル、フォルダの削除
$ rm xxxxxx.conf #ファイルの削除
$ rm -r pages # フォルダの削除
#5#ファイルのコピー
$ cp xxxxxx.txt xxxx123.txt #ファイル単体のコピー
$ cp -r YYYYY ZZZZZ # フォルダーのコピー
#6# ディレクトリを作成
$ mkdir xxxxx #xxxxx ディレクトリをカレントディレクトリに作成
view raw .bash hosted with ❤ by GitHub

2016/06/14

インターネットからの開発者サイトへのアクセスを禁止する - APEX

  • 状況
    インターネットからの開発者サイトへのアクセス時、ログイン画面が表示される。そのアクセスに対して、403エラーを返す。
    また、イントラ向けアプリとインターネット向けアプリが混在している場合、インターネットからのイントラ向けアプリへのアクセスに対して、403エラーを返す。

    以下の画面をインターネットから表示させない。
  • Solution
    mod_rewrite でコントロールする。

    (例) - APEX 4.2.x + OHS を想定
    開発者向け画面(アプリケーション番号は、四千番台:4xxx)と1で始まるアプリケーション番号(1xxx)へのインターネットからのアクセスを403リダイレクトする。

    1. HTTP 接続の場合 - httpd.conf ファイルに以下を追記する

    RewriteEngine on
    RewriteCond %{QUERY_STRING} ^p=1 [OR]
    RewriteCond %{QUERY_STRING} ^p=4
    RewriteRule ^(.*) - [F]


    2. HTTPS接続の場合 - ssl.conf ファイルのvirtualhost内に上記を追記する。
       (注) mod_osslが利用できるようになっていることを確認する。

    ssl.conf のサンプル
    ###################################################################
    # Oracle HTTP Server mod_ossl configuration file: ssl.conf #
    ###################################################################
    # OHS Listen Port
    Listen 4443
    <IfModule ossl_module>
    ##
    ## SSL Global Context
    ##
    ## All SSL configuration in this context applies both to
    ## the main server and all SSL-enabled virtual hosts.
    ##
    #
    # Some MIME-types for downloading Certificates and CRLs
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl .crl
    # Pass Phrase Dialog:
    # Configure the pass phrase gathering process.
    # The filtering dialog program (`builtin' is a internal
    # terminal dialog) has to provide the pass phrase on stdout.
    SSLPassPhraseDialog builtin
    # Inter-Process Session Cache:
    # Configure the SSL Session Cache: First the mechanism
    # to use and second the expiring timeout (in seconds).
    SSLSessionCache "shmcb:${ORACLE_INSTANCE}/diagnostics/logs/${COMPONENT_TYPE}/${COMPONENT_NAME}/ssl_scache(512000)"
    SSLSessionCacheTimeout 300
    # Semaphore:
    # Configure the path to the mutual exclusion semaphore the
    # SSL engine uses internally for inter-process synchronization.
    <IfModule mpm_winnt_module>
    SSLMutex "none"
    </IfModule>
    <IfModule !mpm_winnt_module>
    SSLMutex pthread
    </IfModule>
    ##
    ## SSL Virtual Host Context
    ##
    <VirtualHost *:4443>
    <IfModule ossl_module>
    # SSL Engine Switch:
    # Enable/Disable SSL for this virtual host.
    SSLEngine on
    # Client Authentication (Type):
    # Client certificate verification type and depth. Types are
    # none, optional and require.
    SSLVerifyClient None
    # SSL Protocol Support:
    # List the supported protocols.
    SSLProtocol nzos_Version_1_0 nzos_Version_3_0
    # SSL Cipher Suite:
    # List the ciphers that the client is permitted to negotiate.
    SSLCipherSuite SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_DES_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA
    # SSL Certificate Revocation List Check
    # Valid values are On and Off
    SSLCRLCheck Off
    #Path to the wallet
    #SSLWallet "${ORACLE_INSTANCE}/config/${COMPONENT_TYPE}/${COMPONENT_NAME}/keystores/default"
    SSLWallet file:/u01/app/oracle/product/ohs_apxd1/owm/wallets/oraapxd1
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "${ORACLE_INSTANCE}/config/${COMPONENT_TYPE}/${COMPONENT_NAME}/cgi-bin">
    SSLOptions +StdEnvVars
    </Directory>
    BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
    </IfModule>
    RewriteEngine on
    RewriteCond %{QUERY_STRING} ^p=1 [OR]
    RewriteCond %{QUERY_STRING} ^p=4
    RewriteRule ^(.*) - [F]
    </VirtualHost>
    </IfModule>

    変更後 のイメージ

buffer overflow. Use SET command to reduce ARRAYSIZE or increase MAXDATA.

  • 状況
    SQL*PLUS でSQL実行時に、エラーメッセージ”buffer overflow. Use SET command to reduce ARRAYSIZE or increase MAXDATA.”が表示される。

    環境 ー 古いんです (^^;

    SQL*Plus: Release 3.3.4.0.0 - Production on Mon Jun 13 10:56:36 2016

    Copyright (c) Oracle Corporation 1979, 1996.  All rights reserved.
    Connected to:
    Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
    With the Partitioning option
    JServer Release 8.1.7.4.0 - Production

    SQL> select * from v$version;
    BANNER
    ----------------------------------------------------------------Oracle8i Enterprise Edition Release 8.1.7.4.0 - ProductionPL/SQL Release 8.1.7.4.0 - ProductionCORE    8.1.7.0.0       ProductionTNS for Solaris: Version 8.1.7.4.0 - ProductionNLSRTL Version 3.4.1.0.0 - Production

  • Solution

    SQL> SET ARRAYSIZE 1

    上記を実行の上、SQLを実行する。

2016/06/09

Data set サンプル - Kaggle

サンプル作成用のデータは、以下から取得

Kaggle - https://www.kaggle.com/


1. TITANIC - タイタニック号の乗客名簿

2. IRIS - アヤメのデータ

カラムの幅を固定する - インタラクティブレポート - APEX

  • Goal  (APEX 5.x 向け、4.xは別の方法)
    インタラクティブレポートにおいて、カラムの幅を固定する。
    改行して2行表示にならないようにする。

  • How
    1. インタラクティブリージョンに、静的IDを設定する


    2. 幅を変更したいカラムに、静的IDを設定する


    3. ページのCSS インラインに以下を追加する

    #T td[headers=NAME]{min-width:200px}
    /*
    #<リージョンの静的ID> td[headers=<列の静的ID>]{min-width:200px}
    */
  • To be
    以下のように拡がる


インタラクティブレポートのセルに画像/アイコンを入れる(リンク 無、動的アクション 無) - APEX

  • Goal
    インタラクティブレポートにおいて、セルの中身を画像に変更する。
    リンク 無し、動的アクション 無しで、単に画像が表示されるだけ。
    フィルターは文字列で検索ができる。
    (To be 例) 性別をアイコンで表示する。
        Icon by http://www.fatcow.com/free-icons

    フィルターはこんな感じ

  • As is

    変更前はこんな感じ

  • How
    0. 共有コンポーネント > 静的アプリケーションファイル に、アイコンをUPLOADする。
     その時に、ファイル名を項目の名前と一致させておく。
     この場合は、"male" と "female"。

    1. リージョン: インタラクティブレポート で 対象の列を選び、
     指定 > タイプ: リンク
     リンク > ターゲット: タイプ = "URL"
                                            URL = "#"
     リンクテキストを以下にする
    </a><img src="#APP_IMAGES#ICON/#SEX#.png" alt="" /><a href="#" class="hideMe508">
    //-- 補足1 #SEX# の欄がインタラクティブレポートの列名
    //-- 補足2 <a href="#" class="hideMe508"> は、理由はよくわかりません。 (^^;)

     
  • Reference
    #全般
    Jari's APEX blog

    #データセット
    Titanic: Machine Learning From Disaster

    #アイコン
    フリーアイコン

2016/05/10

7.初回ログイン時、パスワード変更画面へリダイレクト :APEX ID/PASSWORD認証機能 - カスタム編 -

  • Steps
    7. 初回ログイン時、パスワード変更画面へリダイレクト
      -Home画面のロード時にパスワード変更画面へリダイレクトさせる
      -初回ログインかどうかは、PWD_EXPIREで判定

     #HOME画面にProcessを追加



     #Source :OWA_UTILのリダイレクトを使う

    DECLARE
    l_flag number := 0;
    BEGIN
    SELECT PWD_EXPIRE into l_flag from USERMASTER WHERE upper(USERNAME) = upper(:APP_USER);
    IF l_flag = 1
    THEN
    htp.init; -- OWA_UTIL呼ぶには必要らしい
    owa_util.redirect_url('f?p=&APP_ID.:4:&APP_SESSION.'); -- &APP_ID.:<page no>:&APP_SESSION.
    apex_application.stop_apex_engine;
    ELSE
    NULL;
    END IF;
    END;

     
     



UPSERT のサンプル - データがあればUPDATE、なければINSERT


  • Goal
    データがあればUPDATE、なければINSERTする。
    APEXのダイナミックアクションでの利用を想定しており、ボタンをクリックした際にプロシージャで呼び出して、テーブルのUPSERTをする。
  • How
    Merge文を使う
    COLUMN1-4がキーで、FlagをUPSERTする
     
  • Source

    PROCEDURE UPSERT_TABLE(C_1 in VARCHAR2,
    C_2 in VARCHAR2,
    C_3 in VARCHAR2,
    C_4 in VARCHAR2)
    as
    BEGIN
    MERGE INTO <TARGET TABLE> A
    USING DUAL --- プロシージャで1件ずつ追加/上書するなら、DUALで可能
    ON (<COLUMN_1> = C_1
    and <COLUMN_2> = C_2
    and <COLUMN_3> = C_3
    and <COLUMN_4> = C_4)
    WHEN matched then
    update set <FLAG> = case <FLAG> when 1 then 0
    when 0 then 1
    END
    WHEN not matched then
    insert(<COLUMN_1>,<COLUMN_2>,<COLUMN_3>,<COLUMN_4>,<FLAG>)
    values(C_1,C_2,C-3,C_4,1);
    end;
    view raw UPSERT.sql hosted with ❤ by GitHub

2016/05/06

6.パスワード変更画面の作成 その3 :APEX ID/PASSWORD認証機能 - カスタム編 -

  • Steps
    3.ボタン押下時のプロセスの追加

     #ボタンには、”ページの送信”の設定のみ

     #データベースアクションはなし

     
     #ページ送信後のプロセスで、FUNCTION CHGPWD を呼び出す
           (3.PASSWORDを変更するFUNCTION で作成)