最近のトラックバック

最近のコメント

2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

« 2008年9月 | トップページ | 2008年12月 »

2008年11月

2008年11月27日 (木)

はてぶ関連でメモ

まず一個目は、
はてなブックマークのコンテンツの JavaScript を高速化する - IT戦記

そこからさらにリンクされていたのが
2008-11-27 - つれずれなるままに…

んで、解析ツールとしてIBM PageDtailerを使った例として
はてなブックマークが重い件について、Page Detailerというツールを使って調べてみる - id:HolyGrailとid:HoryGrailの区別がつかない日記

動的SQL

Ask Tom "how to dynamically generate cursors with..."

質問した人は、テーブル名をパラメータにして動的にupdate文を生成したいらしい。

やり方は、

CREATE OR REPLACE PROCEDURE populate_email(p_in_table_name VARCHAR2)

AS
   
    TYPE cur_type IS REF CURSOR;
    tmp_cur cur_type;
   
    TYPE email_rec IS RECORD (
        intid internetaddress.intid%TYPE,
        intaddress internetaddress.intaddress%TYPE);   
    query varchar2(100);
   
    tmp_rec email_rec;
BEGIN
   
    query := 'select i.intid, i.intaddress
    from internetaddress i, '||p_in_table_name ||' b
    where i.intid = b.id';
   
    OPEN tmp_cur  FOR query;
    LOOP
        FETCH tmp_cur INTO tmp_rec;
        EXIT WHEN tmp_cur%NOTFOUND;
   
        EXECUTE IMMEDIATE
        'update '||p_in_table_name ||' a
        set a.ademal = substr(trim('||tmp_rec.intaddress||'),1,50)
        where a.id = '||tmp_rec.intid;

    END LOOP;
   
    EXECUTE IMMEDIATE
    'COMMIT';

    CLOSE tmp_cur;

END;

一方Tomの回答は、

execute immediate '
update (select a.ademal, substr( trim( i.intaddress ) ) intaddress
       from ' || dbms_assert.sql_object_name( p_in_table_name ) || ' a,
          internetaddress i
      where i.intid = a.id )
  set ademal = intaddress';



			

« 2008年9月 | トップページ | 2008年12月 »