SQLの窓

2010年06月15日


Google の prototype.js を使う

ホスティングについてはGoogle Hosted Librariesから確認します
1.6.1.0
<script	type="text/javascript" src="http://www.google.com/jsapi" 
 charset="utf-8"></script>
<script	type="text/javascript">
google.load("prototype", "1.6.1.0");
</script>

1.7.0.0
<script	type="text/javascript" src="http://www.google.com/jsapi" 
 charset="utf-8"></script>
<script	type="text/javascript">
google.load("prototype", "1.7.0.0");
</script>



タグ:prototype.js
posted by lightbox at 2010-06-15 23:45 | prototype.js | このブログの読者になる | 更新情報をチェックする

prototype.js 内の getElementsByName の代わりになるメソッド

そもそも、getElementsByName 無いので、無いと思っていたのですが、
Form 単位で input 要素限定でもっといろいろ使えますが、id に name
 をセットして $ で直接参照したほうが早いとは思います。

関連する記事

prototype.js で、$(id) 関数が name 属性のみの場合 IE 以外で使えるようにする
<FORM
	id="frm"
	name="frm"
	method="POST"
>
	<INPUT
		type="submit"
		name="send"
		value="送信"
	>
	<INPUT
		type="text"
		name="fld1"
	>
	<INPUT
		type="button"
		name="js"
		value="check"
		onClick='
			alert( Form.getInputs("frm","","fld1")[0].value )

			var frm = $("frm");
			alert( frm.getInputs("","fld1")[0].value );
		'
	>
</FORM>

フォーム経由の参照なので、画面内の構成が明示されるのはいいと思いますが、
フォームそのものには結局 id が必要になりますから、通常の WEB アプリで
さほど便利だとは思えません。

空文字の引数は、type="タイプ" の文字列を指定するので、 getElementsByName
 の使用目的からすれば必要は無く、単に name で参照できると言う他は差はあり
ません。やはり、

($$("INPUT")).each(function(Element){Element.setAttribute("id",Element.name)}); 

するほうがいいと思います


タグ:prototype.js
posted by lightbox at 2010-06-15 23:35 | prototype.js | このブログの読者になる | 更新情報をチェックする

2010年06月14日


VBScript : ADO経由の一時PL/SQL でエクスポートを実行する(Data Pump Export)

ADO では、一時PL/SQL 内の結果を取得する事ができませんが、OO4O を使用すると可能になります。

関連する記事

OO4O : 一時PL/SQLを実行して、DBMS_OUTPUT の結果を取得する
PL/SQL : OUT タイプのパラメータを持つストアードプロシージャの処理
PL/SQL で エクスポート
<JOB>
<COMMENT>
*******************************
■ Data Pump Export

*******************************
</COMMENT>

<OBJECT id="Cn" progid="ADODB.Connection" />

<SCRIPT language=VBScript>
' *******************************
' 処理開始
' *******************************
' ソース内テキストデータの取得
strPLSQL = RegTrim(GetResource("myTextData"))

' GUI 
if vbCancel = MsgBox( "実行しますか?   ", vbOKCancel , "Data Pump Export" ) then
	Wscript.Echo "キャンセルされました"
end if


strDriver = "{Microsoft ODBC for Oracle}"
strServer = "night/xe"
strUser = "lightbox"
strPass = "lightbox"

ConnectionString = _
	"Provider=MSDASQL" & _
	";Driver=" & strDriver & _
	";Server=" & strServer & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";" 

on error resume next
Cn.Open ConnectionString
if Err.Number <> 0 then
	WScript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

Cn.Execute( strPLSQL )

Cn.Close

Wscript.Echo "処理が終了しました"

' *******************************
' 文字列前後の漢字スペースを含
' むホワイトスペースの削除
' *******************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[ \s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[ \s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
</SCRIPT>

<COMMENT>
*******************************
 ソース内テキストデータ
*******************************
</COMMENT>
<RESOURCE id="myTextData">
<![CDATA[
DECLARE 

/*******************************/
/* 変数の定義 */
/*******************************/
	J_HANDLE NUMBER;
	J_STS VARCHAR2(20);
/*******************************/
/* 処理開始 */
/*******************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');

	/***************************/
	/* OPEN */
	/***************************/
	J_HANDLE := DBMS_DATAPUMP.OPEN(
		'EXPORT'
		,'TABLE'
		,NULL
		,NULL
		,'COMPATIBLE'
		,DBMS_DATAPUMP.KU$_COMPRESS_METADATA
	);

	/***************************/
	/* 出力ファイル */
	/***************************/
	DBMS_DATAPUMP.ADD_FILE(
		J_HANDLE
		,'EXP20100614.DMP'
		,'R205'
		,NULL
		,DBMS_DATAPUMP.KU$_FILE_TYPE_DUMP_FILE
	);

	/***************************/
	/* SQL 式で スキーマを指定 */
	/***************************/
	DBMS_DATAPUMP.METADATA_FILTER(
		J_HANDLE
		,'SCHEMA_EXPR'
		,'IN (''LIGHTBOX'')'
	);

	/***************************/
	/* SQL 式で 表を指定 */
	/***************************/
	DBMS_DATAPUMP.METADATA_FILTER(
		J_HANDLE
		,'NAME_EXPR'
		,'IN (''商品マスタ'')'
	);

	/***************************/
	/* データを出力しない */
	/***************************/
	DBMS_DATAPUMP.DATA_FILTER (
		J_HANDLE
		,'INCLUDE_ROWS'
		,0 /* 1 で出力 */
	);

	/***************************/
	/* 開始 */
	/***************************/
	DBMS_DATAPUMP.START_JOB(
		J_HANDLE
		,0
	);

	/***************************/
	/* JOB 終了まで待機 */
	/***************************/
	DBMS_DATAPUMP.WAIT_FOR_JOB(
		J_HANDLE
		,J_STS
	);

	/***************************/
	/* 終了ステータスの表示 */
	/***************************/
	DBMS_OUTPUT.PUT_LINE('処理終了:'||J_STS);

/*******************************/
/* 一番外側のブロックの例外処理 */
/*******************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
]]>
</RESOURCE>

</JOB>




タグ:Oracle PL/SQL
posted by lightbox at 2010-06-14 20:36 | VBS + ADO | このブログの読者になる | 更新情報をチェックする

2010年06月13日


PL/SQL : OUT タイプのパラメータを持つストアードプロシージャの処理

DBMS_OUTPUT と言う、有名なデバッグ用のパッケージがありますが、この出力結果をアプリケーションから取得するプロシージャは以下のような定義がなされています。
DBMS_OUTPUT.GET_LINE (
   line    OUT VARCHAR2,
   status  OUT INTEGER);

line
最後の改行文字を除いて、バッファに入れられた単一行の情報を戻します。
「ORA-06502: PL/SQL: 数値または値のエラーが発生しました: 文字列バッ
ファが小さすぎます。」の発生を回避するために、このパラメータの実際
の値をVARCHAR2 (32767)として宣言する必要があります。
 
status
コールが正常に完了すると、ステータス0(ゼロ)が戻ります。バッファに
これ以上行がない場合は、ステータス1が戻ります。
 

以下は、Windows の PHP で、OracleInProcServer.XOraSession (OO4O) を使って一時的な PL/SQL 実行の中から DBMS_OUTPUT を行って、その結果を取得する例です。

Add メソッドの第二引数は以下のように説明されています。パラメータの初期値を指定するVariant。 初期値によってこのパラメータのデータ型が定義されるため、重要です。 

これは、クライアント側の事で、サーバー側の定義は ServerType プロパティで行っています
<?
com_load_typelib("{F2D4ED20-FFD3-101A-ADF2-04021C007002},5,0");

$OraSession = new COM( "OracleInProcServer.XOraSession" );

// ***********************************************************
// 処理開始
// ***********************************************************
$plsql = <<<MYTEXT
DECLARE 
	WK_KEY VARCHAR2(4) := '0001';
	WK_NAME VARCHAR2(50);
BEGIN 
	SELECT 氏名 INTO WK_NAME
		FROM 社員マスタ
		where 社員コード = WK_KEY;

	DBMS_OUTPUT.PUT_LINE(WK_NAME);
END;
MYTEXT;

// "PC名/サービス", "ユーザ/パスワード"
$OraDatabase = $OraSession->OpenDatabase("night/xe", "LB/LB", ORADB_DEFAULT);
$OraDatabase->LastServerErrReset();

// DBMS_OUTPUT を使用可能にする
$Query = "BEGIN DBMS_OUTPUT.ENABLE(); END;";
$OraDatabase->ExecuteSQL( $Query );

// CrLf では動かないので、Lf に変換して実行
$Query = str_replace("\r\n","\n", $plsql );
$OraDatabase->ExecuteSQL( $Query );

// DBMS_OUTPUT.GET_LINE の仕様に基づいてパラメータの設定
$OraDatabase->Parameters->Add("PARAM", "", ORAPARM_OUTPUT);
$OraDatabase->Parameters["PARAM"]->ServerType = ORATYPE_VARCHAR2;

$OraDatabase->Parameters->Add("STATUS", 0, ORAPARM_OUTPUT);
$OraDatabase->Parameters["STATUS"]->ServerType = ORATYPE_NUMBER;

// 結果を読みだす為のメソッドを実行
$Query = "BEGIN DBMS_OUTPUT.GET_LINE(:PARAM,:STATUS); END;";
$OraDatabase->ExecuteSQL( $Query );

// メモリ上のデータを読み出し
while( $OraDatabase->Parameters["STATUS"]->Value == 0 ) {
	print $OraDatabase->Parameters["PARAM"]->Value . "\n";
	$OraDatabase->ExecuteSQL( $Query );
}
		
// パラメータの削除
$OraDatabase->Parameters->Remove("STATUS");
$OraDatabase->Parameters->Remove("PARAM");


print "処理が終了しました";

?>


タグ:PL/SQL
posted by lightbox at 2010-06-13 14:34 | Oracle : PL/SQL | このブログの読者になる | 更新情報をチェックする

2010年06月12日


prototype.js : $ 関数

引数が複数の場合は、全ての引数に対して $ 関数を実行して結果を配列にセット
して、配列自身を戻します。引数が一つの場合、文字列の場合のみ、getElementById
でオブジェクト化した上で、prototype.js の Element クラスのインスタンスとして
拡張します。元々getElementById 等で取得されていたオブジェクトの場合も同様に
拡張され、prototype.js の Element クラスのインスタンスが引数の場合のみ何も
しません。

( If the element instance was already extended, this is a no-op )
function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element = document.getElementById(element);
  return Element.extend(element);
}



タグ:prototype.js
posted by lightbox at 2010-06-12 22:16 | prototype.js | このブログの読者になる | 更新情報をチェックする

prototype.js : 1.6.1と1.7_rc2 の evalJSON の違い

厳密に何が変わったのかは知りませんが、かなり XSS に神経質になっているのかもしれませんね。

Always set the sanitize parameter to true for data coming from
 externals sources to prevent XSS attacks.

元々、常に、str.evalJSON(true) という呼び出しして下さいって事になっていますが、それは常に入力値に対して無防備な文字列を通す場合です。ですが、true にしていて何も悪い事は無いのでしたほうがいいですね

ただ、1.7_rc2 では相当何かテコ入れしているようなのですが・・・イマイチマニュアルには書かれていないようなのです。( 当たり前と言えば当たり前ですが )

何なんでしょう。
1.6.1
  function evalJSON(sanitize) {
    var json = this.unfilterJSON();
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
  }

1.7_rc2
  function evalJSON(sanitize) {
    var json = this.unfilterJSON(),
        cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
    if (cx.test(json)) {
      json = json.replace(cx, function (a) {
        return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
      });
    }
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
  }



タグ:prototype.js
posted by lightbox at 2010-06-12 21:43 | prototype.js | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり