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;

関数内で使用しているオブジェクトが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>

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
  • マイクロドライブが取り出せない!!

    LinuxZaurus SL-C860 を SL-C3000にする
    先日購入したSL-C860をSL-C3000(SL-C3100)と同等にしてしまいます。
    SL-C3000は、小さいボディになんと4Gものハードディスクドライブを搭載したLinuxザウルスです。
    じゃあSL-C860のCFカードスロットにマイクロドライブを入れればおんなじじゃねーか、ということでやってみました。
    “マイクロドライブが取り出せない!!” の続きを読む