FC2ブログ

まったり開発日誌

embossの工具箱(J2EE Java2 Linux Zaurus C++)

2005年10月07日

  1. DOSとPL/SQLコマンドの挙動について(10/07)
  2. 対話型ユーザー アカウントで実行するように Office アプリケーションを構成する方法(10/07)
  3. ASPの開発中にSQL_TRACEをONにする工夫(10/07)
  4. SchTasks(10/07)
  5. SQL*PlusでCSV作成(10/07)
  6. シノニムを使ったビューが実現可能であるか (10/07)
  7. BYPASS_UJVC(Updatable Join View Check)(10/07)
  8. OracleでPFILEとSPFILEのどちらを使っているのか調べる(10/07)
  9. マルチテーブルアップデート(10/07)
  10. クラシックASPでデバッグを行う方法(10/07)
  11. Oracle9iでルータ越えの設定をする(10/07)
  12. PL/SQLで時間を計測する(10/07)
  13. 関数内で使用しているオブジェクトがDROPされた場合のパッケージの挙動(10/07)
  14. DOSバッチでユーザに値を入力させる(10/07)

DOSとPL/SQLコマンドの挙動について

タスク起動系のコマンドとその挙動について



コマンド HOST
タイプ SQL*Plus
挙動 処理が終わるまで呼び出し元は停止する
参考 PL/SQL内では使用不可、DOSの環境変数が使えない?

コマンド CALL
タイプ DOS
挙動 処理が終わるまで呼び出し元は停止する
参考

コマンド START
タイプ DOS
挙動 処理はすぐに呼び出し元に戻されるが、/WAITを付ければCALLと同じ動きになる
参考 新プロセスを開きコマンドを実行


WSHによるタスクについて




タスクの一時停止について


DOSの場合、一時停止する方法が無い為、VBScriptを使用する

sleep.bat


echo off
REM Sleep.bat [秒数]
set /a wtime=(%1+0)*1000
echo WScript.Sleep %wtime% > tmp.vbs
cscript //NoLogo tmp.vbs
del tmp.vbs
set wtime=

PL/SQLの場合次のパッケージを使用する


DBMS_LOCK.SLEEP(300);

SQL*Plusを使用したデータの取得


変数&t_dayにシステム日付を代入する。


column tday new_value t_day
select to_char(sysdate, 'yyyymmdd') as tday from dual;

SQL> select'&t_day' "今日" from dual;
旧 1: select'&t_day' "今日" from dual
新 1: select'20050708' "今日" from dual

今日
--------
20050708

SQL>

スポンサーサイト
  1. 2005/10/07(金) 18:26:50|
  2. 開発メモ-Windows
  3. | トラックバック:0
  4. | コメント:0

対話型ユーザー アカウントで実行するように Office アプリケーションを構成する方法

下記アドレス参照
http://support.microsoft.com/default.aspx?scid=kb;JA;288366
  1. 2005/10/07(金) 18:25:51|
  2. 開発メモ-Windows
  3. | トラックバック:0
  4. | コメント:0

ASPの開発中にSQL_TRACEをONにする工夫

こんなページを作っておくとデバッグ時に有効。

<%
Dim CMD
Dim adoCmd 'ADOオブジェクト
Dim commandText
Dim strMessageONOFF
CMD = Request("CMD")
Call main
Sub main()
'on error resume next
If fncChkSession(1,"") <> 0 Then
'不正の場合は終了
Exit Sub
End If
IF CMD="ON" THEN
commandText = "alter session set sql_trace=true"

strMessageONOFF =commandText & "を実行しました<BR>目的のページを実行後、必ずこのページに戻りOFFにして下さい<BR>OFFにしない場合、サーバーに負荷がかかり続けます<BR>"
ELSEIF CMD="OFF" THEN
commandText = "alter session set sql_trace=false"

strMessageONOFF =commandText & "を実行しました<BR><A href=""\\localhost\c$\oracle\admin\ORCL\udump"">トレースファイル</A>を確認してください。<BR>"
ELSE
strMessageONOFF=""
END IF

IF strMessageONOFF <> "" THEN

Session(pcSconDBConn).Execute commandText




END IF
if err.number<>0 then
response.write("err!")
end if
End Sub

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja"><head><meta content="text/html; charset=Shift_JIS" http-equiv="content-type"><title></title></head><body>

<div style="position: absolute; width: 449px; height: 122px; top: 50px; left: 34px;">

<%=strMessageONOFF %>
<form method="get" action="sqltrace.asp" name="FORM">
<div style="text-align: center;"><input name="CMD" value="ON" type="radio">ONにする <input name="CMD" value="OFF" type="radio">OFFにする<br>

<br>
<br>
</div>
<div style="text-align: center;"><input type="submit"></div>
</form>

</div>
</body></html>
  1. 2005/10/07(金) 18:20:09|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

SchTasks

定期的または特定の時間にコマンドおよびプログラムを実行するようスケジュールします。スケジュールのタスクの追加と削除、要求時のタスクの開始と停止、およびスケジュールされたタスクの表示と変更を行います。
SchTasks.exe は、Windows の旧バージョンのツールである At.exe に置き換わるものです。
詳しくはWindowsのヘルプを参照。
  1. 2005/10/07(金) 18:17:44|
  2. 開発メモ-Windows
  3. | トラックバック:0
  4. | コメント:0

SQL*PlusでCSV作成

SQL*Plus の機能で、colsep で結果セットのカラム毎のセパレータを定義できる。


SQL> set heading off
SQL> set colsep ","
SQL> select * from 社員マスタ;
社 社員氏名
-- ------------------------------
01 かねやん
02 うえださん
03 いのっしー
04 あかっしー
05 トランスfonda
  1. 2005/10/07(金) 18:16:32|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

シノニムを使ったビューが実現可能であるか

できます。


SQL> CREATE TABLE A(
2 NAME VARCHAR2(10)
3 );

表が作成されました。

SQL> CREATE TABLE B(
2 NAME VARCHAR2(10)
3 );

表が作成されました。

SQL>
SQL> INSERT INTO A VALUES('テーブルA');

1行が作成されました。

SQL> INSERT INTO B VALUES('テーブルB');

1行が作成されました。

SQL>
SQL> CREATE SYNONYM S FOR A;

シノニムが作成されました。

SQL>
SQL> CREATE VIEW V AS SELECT NAME FROM S;

ビューが作成されました。

SQL>
SQL> SELECT NAME FROM V;

NAME
----------
テーブルA

SQL>
SQL> DROP SYNONYM S;

シノニムが削除されました。

SQL> CREATE SYNONYM S FOR B;

シノニムが作成されました。

SQL>
SQL> SELECT NAME FROM V;

NAME
----------
テーブルB


  1. 2005/10/07(金) 18:15:32|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

BYPASS_UJVC(Updatable Join View Check)

BYPASS_UJVC(Updatable Join View Check)

結合ビュー(Join View)に対してUPDATEを実施すると、2つの表の主キーが一致しておらず内容的にも重複がある(対象表の同一行を複数回更新する)場合

ORA-01779:
 複数表にマップする列を変更できません。(Oracle8iの場合)
 キー保存されていない表にマップする列は変更できません(Oracle9iの場合)

原因:
 キー保存されていない表にマップする結合ビューの列を挿入または更新しようとしました。
処置:
 基礎となる実表を直接変更してください。

というエラーになります。

結合キーが一意でない結合ビュー(Join View)に対して UPDATEを実施したい場合、Oracle8i以降の環境では BYPASS_UJVCというヒントを付けて実行するとORA-1779エラーが発生しません。

参考URL
http://pukiwiki.postcle.com/zange/index.php?BYPASS_UJVC
  1. 2005/10/07(金) 18:14:10|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

OracleでPFILEとSPFILEのどちらを使っているのか調べる

pfile、spfileのどちらから起動したのかを知りたい

「show parameter spfile とコマンドしてパスが表示されればspfile、
表示されなければpfileということになります」
  1. 2005/10/07(金) 18:13:21|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

マルチテーブルアップデート

マルチテーブルアップデート

複数テーブルの情報からUPDATEを実行する方法を検証しました。以下のようにすればDテーブルの内容でCテーブルを更新することが出来ます。
しかしこの方法はあまり早く有りません。(かといってそんなに遅くもありません。)
結合ビュー(Join View)に対してUPDATEを実施するほうが高速に動作するようです。方法はBYPASS_UJVCを参照の事。

create table C(
TEL_NUMBER VARCHAR2(10) NOT NULL, /* KEY */
KBN1 VARCHAR2(10),
KBN2 VARCHAR2(10),
CONSTRAINT C_PK PRIMARY KEY (TEL_NUMBER)
);

create table D(
TEL_NUMBER VARCHAR2(10) NOT NULL, /* KEY */
KBN1 VARCHAR2(10),
KBN2 VARCHAR2(10),
CONSTRAINT D_PK PRIMARY KEY (TEL_NUMBER)
);

insert into C values('1','','');
insert into C values('2','','');
insert into C values('3','','');
insert into C values('4','','');
insert into C values('100','','');


insert into D values('1','a','a');
insert into D values('2','b','b');
insert into D values('3','c','c');
insert into D values('200','d','d');
insert into D values('5','e','e');


UPDATE C
SET (KBN1,KBN2)=
(SELECT D.KBN1,D.KBN2 FROM D WHERE C.TEL_NUMBER = D.TEL_NUMBER)
WHERE EXISTS
(SELECT 'x' FROM D WHERE C.TEL_NUMBER = D.TEL_NUMBER);


select * from C;

drop table C;
drop table d;
  1. 2005/10/07(金) 18:12:44|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

クラシックASPでデバッグを行う方法

クラシックASPでデバッグする方法

IISを準備する。
VisualInterDev?をインストールする。
VisualInterDev? Server Setupをインストールする。(IISのデバッグを行うを参照)
dcomcnfgを起動する

* CatalogClass?のセキュリティ権3つとも独自のアクセス権に変更して自分を割り当てる
* Machine Debug Managerも同様
* MTS Client Exportも同様(ほとんど存在しないのでなくても気にしなくていい) VIDでスタートページを設定する。
VIDでF5でデバッグ開始
ASPのデバッグをするためにはVIDは手放せないです。

http://support.microsoft.com/kb/312880/ja

Visual Studio.NET に移行させられればいいんですけどね・・・・

さらにWindowsXPの場合は次の作業もやっておくと吉
画面のプロパティの[テーマ]-で[Windowsクラシック]にする。
システムのプロパテの[詳細設定]で[パフォーマンス]の設定ボタンを押下
パフォーマンスオプションで[パフォーマンスを優先する]を設定。
これで安定してデバッグできる!
  1. 2005/10/07(金) 18:12:32|
  2. 開発メモ-Windows
  3. | トラックバック:0
  4. | コメント:0

Oracle9iでルータ越えの設定をする

以下のようにします。

ALTER SYSTEM SET
dispatchers='(PROTOCOL=TCP)';

DISPATCHERS は、共有サーバー・アーキテクチャ内のディスパッチャ・プロセスを構成します。Oracle のパラメータ解析部は、属性を順番にかかわりなく大/ 小文字を区別せずに指定できるような名前値の構文をサポートします。次に例を示します。 DISPATCHERS = "(PROTOCOL=TCP)(DISPATCHERS=3)"
今回のリリースでは、ALTER SYSTEM 文のDISPATCHERS 初期化パラメータで、SCOPE 句がサポートされていません。
現行のインスタンスのDISPATCHERS パラメータを再構成するには、SCOPE 句を指定せずにALTER SYSTEM SET DISPATCHERS 文を発行します。この新しい構成を永続化するには、データベースを起動する前に初期化パラメータ・ファイルのDISPATCHERS パラメータを指定します。サーバー・パラメータ・ファイル(spfile)を使用してデータベースを起動している場合は、CREATE SPFILE を発行して、初期化パラメータからspfile を再作成する必要があります。
  1. 2005/10/07(金) 18:07:37|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

PL/SQLで時間を計測する

PL/SQLで時間を計測する

DECLARE
StartTime NUMBER;
EndTime NUMBER;
ElapsedTime NUMBER;
i BINARY_INTEGER;
j BINARY_INTEGER;
BEGIN
-- 計測開始
StartTime := DBMS_UTILITY.GET_TIME;
for i IN 1..1000 LOOP
for j IN 1..1000 LOOP
NULL;
-- 何らかの処理
END LOOP;
END LOOP;
-- 計測終了
EndTime := DBMS_UTILITY.GET_TIME;
ElapsedTime := ( EndTime - StartTime ) / 100;
DBMS_OUTPUT.PUT_LINE( TO_CHAR( ElapsedTime, '9999.99' )||'秒' );
END;
  1. 2005/10/07(金) 18:06:35|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

関数内で使用しているオブジェクトがDROPされた場合のパッケージの挙動

関数内で使用しているオブジェクトがDROPされた場合はエラーとなりますが、再度作成されると問題なく動作します。その際に際コンパイルも不要です。


SQL> conn scott/tiger@
接続されました。
SQL> DROP TABLE A;

表が削除されました。

SQL> DROP TABLE B;

表が削除されました。

SQL> DROP SYNONYM S;

シノニムが削除されました。

SQL> DROP VIEW V;

ビューが削除されました。

SQL>
SQL> CREATE TABLE A(
2 NAME VARCHAR2(10)
3 );

表が作成されました。

SQL> CREATE TABLE B(
2 NAME VARCHAR2(10)
3 );

表が作成されました。

SQL>
SQL> INSERT INTO A VALUES('テーブルA');

1行が作成されました。

SQL> INSERT INTO B VALUES('テーブルB');

1行が作成されました。

SQL>
SQL> CREATE SYNONYM S FOR A;

シノニムが作成されました。

SQL>
SQL> CREATE VIEW V AS SELECT NAME FROM S;

ビューが作成されました。

SQL>
SQL> SELECT NAME FROM V;

NAME
----------
テーブルA

SQL>
SQL> DROP SYNONYM S;

シノニムが削除されました。

SQL> CREATE SYNONYM S FOR B;

シノニムが作成されました。

SQL>
SQL> SELECT NAME FROM V;

NAME
----------
テーブルB

SQL>
SQL> CREATE OR REPLACE PACKAGE P IS
2 FUNCTION P RETURN VARCHAR2; END P;
3 /

パッケージが作成されました。

SQL> CREATE OR REPLACE PACKAGE BODY P AS
2 FUNCTION P RETURN VARCHAR2 IS
3 strNAME V.NAME%TYPE;
4 BEGIN
5 SELECT NAME INTO strNAME FROM V;
6 RETURN strNAME;
7 END P;
8 END P;
9 /

パッケージ本体が作成されました。

SQL>
SQL> select P.P from dual;

P
-----------------------------------------------------
テーブルB

SQL>
SQL> DROP SYNONYM S;

シノニムが削除されました。

SQL>
SQL> select P.P from dual;
select P.P from dual
*
行1でエラーが発生 しました。:
ORA-04063: package body "SCOTT.P"にエラーがあります。


SQL>
SQL> CREATE SYNONYM S FOR A;

シノニムが作成されました。

SQL>
SQL> select P.P from dual;

P
-----------------------------------------------------
テーブルA

SQL>
  1. 2005/10/07(金) 18:04:59|
  2. 開発メモ-データベース
  3. | トラックバック:0
  4. | コメント:0

DOSバッチでユーザに値を入力させる

  • ユーザに値を入力させる。
    @echo off
    setlocal
    REM keyinにダミーをセット(初期化)
    set keyin=0
    echo Input:プロンプト以降にパラメータを入力して、Enterキーを押下してください。
    REM /Pオプションで標準入力より取得
    set /p keyin=Input:
    REM ここではechoしたが、実際にはIF文等で入力をチェックする。
    echo 入力した値は %keyin% です。
    endlocal
    pause
    1. 2005/10/07(金) 17:45:38|
    2. 開発メモ-Windows
    3. | トラックバック:0
    4. | コメント:0

    RSSフィード

    カレンダー

    09 | 2005/10 | 11
    - - - - - - 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 - - - - -

    カテゴリー

    最近の記事

    最近のコメント

    最近のトラックバック

    月別アーカイブ

    ブロとも申請フォーム

    この人とブロともになる

    ブログ内検索

    リンク

    このブログをリンクに追加する

    メールフォーム

    名前:
    メール:
    件名:
    本文: