SQLの窓

2018年06月09日


タスクスケジューラの使用方法(schtasks.exe と taskschd.msc) : /IT という正しい説明がされていないオプションの使用方法

タスクスケジューラは、UI から登録するとそんなに問題はありませんが、schtasks.exe を使用してデスクトップと対話させるタスクを起動する場合は注意が必要です。



task_test : テスト用タスクを登録するコマンド
SCHTASKS /Create /RU ログインユーザ /RP パスワード /SC MINUTE /TN task_test /IT /TR "C:\user\bat\open_cmd.bat"
schtasks /Create /? で表示されるオプションの指定方法には、/IT というものがあります。
ジョブの実行時に /RU ユーザーが現在ログオンしている場合にのみ、タスクが対話的に実行されるようにします。このタスクは、ユーザーがログインしている場合にのみ実行します。
とありますが、登録直後は『ユーザーがログオンしているかどうかにかかわらず』に設定されています。さらに、登録時には以下のメッセージが表示されます。
警告: タスクは登録されていますが、指定されたすべてのトリガーがこのタスクを開始するわけではありません。詳細については、タスク スケジューラのイベント ログを確認してください。
/IT を指定しない場合は、バッチ処理として正常に登録されてすぐに処理がスケジュールされますが、/IT を指定した場合は処理そのものが実行されずに『不思議な待機状態』になっています。 そこで、ユーザにログオンしている時のみ実行するに変更 そうすると、スケジュールどおりに実行を開始します。 但し、この登録では /SC MINUTE で『1分ごとに無期限に繰り返す』ので、1分後に再びコマンドプロンプトを開こうとするのですが、前のタスクが終わって無い場合はコマンドプロンプトは開きません つまり、このタスクは『1分毎にチェックして、もしコマンドプロンプトが無かったらコマンドプロンプトを開く』というタスクになった事になります open_cmd.bat
cd \ & cd %temp% & cmd /k
いずれにしても、削除は UI ( ファイル名を指定して実行から taskschd.msc ) から行うといいですし、登録だけ /IT でコマンドでしておいて、後から UI で適宜変更するといいと思います。
posted by lightbox at 2018-06-09 20:47 | Windows10 | このブログの読者になる | 更新情報をチェックする

2018年05月28日


PL/SQL : Function と Procedure の簡単なサンプル

SELECT 〜 INTO を使用して、社員コードを渡して氏名を取得する

Function : GET_CNAME


簡易 PL/SQL ビルダーのダウンロード(【接続/ダイアログ・ビルド/アイコンクリック・実行/アイコンクリック】 しかできません)

FUNCTION GET_CNAME
(
	/* 文字列引数の定義 */
	PM_STRING IN VARCHAR2
)
/* 戻り値の定義 */
RETURN VARCHAR2

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000) := '初期値の設定';

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	/* デバッグ表示 */
	DBMS_OUTPUT.PUT_LINE( 'デバッグ:開始' );
	DBMS_OUTPUT.PUT_LINE( 'デバッグ:引数:' || PM_STRING );
	DBMS_OUTPUT.PUT_LINE( WK_VALUE );

	/* 代入 */
	RET_VALUE := PM_STRING;

	IF RET_VALUE is NULL THEN 
		DBMS_OUTPUT.PUT_LINE( 'NULLデータです' );
		RET_VALUE := '該当者は存在しません';
	ELSE 
		DBMS_OUTPUT.PUT_LINE( 'データ有り' );
		SELECT 氏名 INTO WK_VALUE from 社員マスタ
			WHERE 社員コード = RET_VALUE;
		RET_VALUE := WK_VALUE;
	END IF; 

	/* 戻り値 */
	RETURN RET_VALUE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
$if 1=1 $then
EXCEPTION
	WHEN OTHERS THEN
		WK_VALUE := '例外発生:'||SQLCODE||':'||SQLERRM;
		DBMS_OUTPUT.PUT_LINE( WK_VALUE );
		RET_VALUE := '該当データがシステムに存在しません';
		RETURN RET_VALUE;
$end
END;


カーソルを使用してデータを読み込んで、csv データをディレクトリオブジェクト経由でディスクにファイルを出力する

Procedure : LIST_MEMBER


PROCEDURE LIST_MEMBER
(
	/* カーソルの範囲指定用  */
	PM_STRING IN VARCHAR2
)

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	WK_VALUE	VARCHAR2(2000);

	/* カーソルの定義(主に複数読み込み用)  */
	CURSOR cur_main IS
		SELECT
			社員コード||','||
			氏名||','||
			フリガナ||','||
			所属||','||
			性別||','||
			作成日||','||
			更新日||','||
			給与||','||
			手当||','||
			管理者||','||
			生年月日
			from "社員マスタ"
		where 社員コード <= PM_STRING;

	-- ディスクへ書き込むファイル名
	WK_FILENAME VARCHAR2(100) := 'syain.csv';
	-- ファイルにアクセスする為のハンドルの定義
	FILEHANDLE UTL_FILE.FILE_TYPE;

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
	DBMS_OUTPUT.PUT_LINE('デバッグ:引数:'||PM_STRING);

	/* カーソルを開く */
	OPEN cur_main;

	-- 第一引数は、ディレクトリオブジェクトの名称( 但し文字列 )
	FILEHANDLE := UTL_FILE.FOPEN( 'LOGDIR', WK_FILENAME, 'w' );

	/* ループ処理(ブロック) */
	LOOP 
		/* 定義したレコード変数に読み込み */
		FETCH cur_main INTO WK_VALUE;
		/* カーソルに対するシステム変数でデータ終わりを判断 */
		if cur_main%NOTFOUND then 
			/* ループ処理を脱出 */
			EXIT; 
		end if; 

		-- 書き込み
		UTL_FILE.PUT_LINE(FILEHANDLE,WK_VALUE);
	 
	END LOOP; 

	-- ファイルを閉じる
	UTL_FILE.FCLOSE( FILEHANDLE );

	/* カーソルを閉じる */
	CLOSE cur_main;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
$if 1=1 $then
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
$end
END;

データ作成

mdb よりデータを作成する スクリプト(32ビット用/cscript.exe で呼び出せば 64ビット)のダウンロード

26、27、29 行目を環境に合わせて変更

※  ディレクトリオブジェクトの作成

関連する記事

Oracle : PL/SQL Function の使用方法

Oracle 11g 学習環境の作成 : SQLPlus の環境作成
Oracle SQLPlus でスキーマの作成




posted by lightbox at 2018-05-28 12:08 | Oracle : PL/SQL | このブログの読者になる | 更新情報をチェックする

Oracle : PL/SQL Function の使用方法

Function オブジェクトは Procedure オブジェクトと違い、select 文の列名リストの中で使用できるので簡単に結果を体験できる有用なオブジェクトです。

サンプル : MF
CREATE OR REPLACE FUNCTION MF
(
	PM_STRING IN NUMBER	/* 引数の定義 */
)
RETURN VARCHAR2	/* 戻り値の定義 */

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000);

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
	DBMS_OUTPUT.PUT_LINE('デバッグ:引数:'||PM_STRING);

	if PM_STRING = 0 then
		RET_VALUE := '男';
	else
		RET_VALUE := '女';
	end if;
	RETURN RET_VALUE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		RET_VALUE := '例外発生:'||SQLCODE||':'||SQLERRM;
		RETURN RET_VALUE;
END;

SQL の窓 build c++ で作成できます


確認用 SQL 文
select 社員コード
	,氏名
	,フリガナ
	,所属
	,性別
	,mf(性別) as 性別名
	,作成日
	,更新日
	,給与
	,手当
	,管理者
	,生年月日 
 from 社員マスタ



DBMS_OUTPUT の結果を表示する為には、SQLPlus を使用します。
( Oracle 11g 学習環境の作成 : SQLPlus の環境作成 )

SET SERVEROUTPUT ON の設定により、select 文を実行しただけで、DBMS_OUTPUT の内容が表示されますが、Call 文を使用して、単独でテストすることが可能です。
SQL> variable str VARCHAR2(10);
SQL> call mf(0) into :str;
デバッグ:開始
デバッグ:引数:0

コールが完了しました。

SQL> print str

STR
----------------------------------------------------------------
男

▼ ソースコードは以下の SQL で取得可能です。
select * from USER_SOURCE where NAME = 'MF' order by LINE
データ作成 mdb よりデータを作成する スクリプト(32ビット用/cscript.exe で呼び出せば 64ビット)のダウンロード 26、27、29 行目を環境に合わせて変更 ※ ディレクトリオブジェクトの作成 関連する記事 PL/SQL : Function と Procedure の簡単なサンプル Oracle 11g 学習環境の作成 : SQLPlus の環境作成 Oracle SQLPlus でスキーマの作成
posted by lightbox at 2018-05-28 11:28 | Oracle : PL/SQL | このブログの読者になる | 更新情報をチェックする

Oracle SQLPlus でスキーマの作成

Oracle は他の RDBMS と違ってテーブルを作ってアクセスするようにする為にいろいろなものを作成して設定する必要があります。

ここでは、SQLPlus を使用して SQL と コマンドを使用してテーブルを作成する事ができる状態までの環境を作成します。

一応、SQLPlus の環境としては、以下の記事で作成したものを使用しますが、普通に SQLPlus に SYSTEM ユーザでログインすれば可能なはずです( as SYSDBA は使用したほうがいいと思いますが )

Oracle 11g 学習環境の作成 : SQLPlus の環境作成
( この記事内で、データファイルを置くパスを確認しています )

環境作成用の sql を3つ作成する

SQLPlus のワークディレクトリに置きます。専用のフォルダに置いて作業するといいと思います。
create tablespace STUDY
datafile 'C:\APP\LIGHTBOX\ORADATA\ORCL\STUDY.DBF'
	size 5M
	autoextend on
	next 1M
	maxsize unlimited
segment space management AUTO;


create user LIGHTBOX
	identified by study
	default tablespace STUDY
	temporary tablespace TEMP
	quota unlimited on STUDY
	account unlock;

create role STUDY_ROLE;

grant 
	 ALTER PROFILE 
	,ALTER SESSION 
	,ALTER SYSTEM 
	,ALTER TABLESPACE 
	,ALTER USER 
	,CREATE PROCEDURE 
	,CREATE PROFILE 
	,CREATE PUBLIC SYNONYM 
	,CREATE ROLE 
	,CREATE ROLLBACK SEGMENT 
	,CREATE SEQUENCE 
	,CREATE SESSION 
	,CREATE SYNONYM 
	,CREATE TABLE 
	,CREATE TABLESPACE 
	,CREATE TRIGGER 
	,CREATE VIEW 
	,EXECUTE ANY PROCEDURE 
	,SELECT ANY DICTIONARY 
	,SELECT ANY SEQUENCE 
	,SELECT ANY TABLE
to STUDY_ROLE;

grant STUDY_ROLE to LIGHTBOX;

この3つの SQL を順番に実行します。SQLPlus 内では、それぞれ以下のように入力すると実行されます。
@tablespace
@createuser
@createrole
全て実行した後は、ユーザが lightbox パスワードが study でログインできるはずです。 (ユーザパスワードの変更は alter user で実行します) recyclebin を使用しないようにする デフォルトでは使用する事になっているので、テーブル一覧に不明な recyclebin 用のテーブルが表示されたりします。もともと、削除したテーブルの復帰用なので学習には不向きで邪魔なだけなので使用しないようにします。 ▼ SQLPlus で以下を実行してください
alter system set recyclebin = off deferred;
DEFERREDキーワード は次のセッションで有効にするという意味です。SQLPlus ではいったん quit して再度接続すると有効になっていると思います。確認は以下の SQLPlus コマンド を実行して下さい。
show parameter recyclebin
SQL で見る場合は 『select * from V$PARAMETER where name = 'recyclebin';』ですが、SQLPlus では見づらいのでコマンドを使用して下さい。 データ作成 mdb よりデータを作成する スクリプト(32ビット用/cscript.exe で呼び出せば 64ビット)のダウンロード 26、27、29 行目を環境に合わせて変更 ※ ディレクトリオブジェクトの作成 関連する記事 Oracle 11g 学習環境の作成 : SQLPlus の環境作成
posted by lightbox at 2018-05-28 11:26 | Oracle : 環境 | このブログの読者になる | 更新情報をチェックする

Oracle 11g 学習環境の作成 : SQLPlus の環境作成

手元の環境は、Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production です。32ビットなので、64ビットのPC では少しいろいろありますが、スキーマ作成に関して基本は SQL を用意してコマンドを入力して実行するという手順になります。

Oracle をインストールしたユーザであれば問題無いはすですが、ユーザが ora_dba グループに入っている事を確認します。



1) sqlplus 用のフォルダを用意して、そこで sqlplus を実行

c:\tools\oracle というフォルダを作成しました。そこに、コマンドプロンプトのショートカットを作成します。
※ Windows システムツールの中にあるので、コピーして使用しますが、無ければ直接 cmd.exe でショートカットを作成します。
※ アイコンを右クリックして『その他』=>『ファイルの場所を開く』でそこからコピーします

2) ショートカットの情報を変更

a) リンク先は、このように入力すると Oracle インストール済みならばフルパスを補完してくれます。
b) 作業フォルダーはクリアすればカレントフォルダで起動します。



c) 詳細設定では念のため管理者権限にチェックしておきます。



タイトルは何でもいいので、全般タブで変更します。



3) sqlplus の初期設定用 login.sql をフォルダに置く
SET VERIFY OFF
SET SERVEROUTPUT ON
SET LINESIZE 200
SET PAGESIZE 1000
--SET AUTOCOMMIT IMM

行頭の -- は行コメントです。
※ SET SERVEROUTPUT ON を指定しないと、DBMS_OUTPUT の結果が表示されません
※ SET AUTOCOMMIT IMM を指定すると、SQL の UPDATE 時に 自動的にコミットされます

4) sqlplus を実行してコマンドウインドウの設定を行う

コマンドウインドウ上でドラッグでコピー、右クリックでペーストできるように簡易編集モードを ON にします。



作業しやすいように好みの幅にコマンドウインドウサイズを変更します。



5) login.sql の内容が反映されているかを確認する

SQL プロンプトで show all と入力して、SERVEROUTPUT が ON である事を確認する





6) Oracle のデータの場所を確認しておく

以下を入力して *.DBF ファイルの場所を確認します。

select * from DBA_DATA_FILES;

スキーマを作成する際に、データファイルと表領域を事前に作成するので確認します。




データ作成

mdb よりデータを作成する スクリプト(32ビット用/cscript.exe で呼び出せば 64ビット)のダウンロード

26、27、29 行目を環境に合わせて変更

※  ディレクトリオブジェクトの作成


関連する記事

Oracle SQLPlus でスキーマの作成




posted by lightbox at 2018-05-28 11:25 | Oracle : 環境 | このブログの読者になる | 更新情報をチェックする

2018年05月27日


VBScript : 新しい Excel の Book を作成する

Excel 2007 以降の場合

VBScript : Excel の新しいBookを作成する
2007 以降の場合、.xls の拡張子で保存時はフォーマットを指定しないと読みだす時に警告が出るようです

サンプルは、.xlsx で保存しています

イントラネットのWEBページで利用されるテクニックの基本的な部分です。イントラネットの場合は、フォーマットを事前に作成しておくので、Excel ブックの作成を行う事は稀ですが、簡単な運用に使う場合は新規にブックが必要になると思います

※ 複数回実行すると上書きされます

昔から、Excel.Application の扱いはけっこう厄介で、実行する毎に Quit しておくとトラブルを最低限に抑える事ができます。しかし、操作方法のルールとリカバリ方法をマニュアル化しておく事が最も重要になります( トラブル時は、非表示のままメモリに残るので、タスクマネージャからタスクの終了をする必要があります )
' ****************************
' Excel オブジェクト作成
' ****************************
Set App = CreateObject("Excel.Application")

' ****************************
' 警告を出さないようにする
' ****************************
App.DisplayAlerts = False

' ****************************
' ブック追加
' ****************************
App.Workbooks.Add()

' ****************************
' 追加したブックを取得
' ****************************
Set Book = App.Workbooks( App.Workbooks.Count )

' ****************************
' ブックにはシート一つ
' ****************************
Set Worksheet = Book.Worksheets( 1 )
Worksheet.Activate()
Call Book.Worksheets.Add(,Worksheet)

' ****************************
' シート名設定
' ****************************
Book.Sheets(1).Name = "新しい情報"
Book.Sheets(2).Name = "予備情報"

' ****************************
' 参照
' ****************************
FilePath = App.GetSaveAsFilename(,"Excel ファイル (*.xlsx), *.xlsx", 1)
if FilePath = "False" Then
	MsgBox "Excel ファイルの保存選択がキャンセルされました"
	Wscript.Quit()
End If

' ****************************
' 保存
' ****************************
on error resume next
Book.SaveAs( FilePath )
if Err.Number <> 0 then
	MsgBox( "ERROR : " & Err.Description )
end if
on error goto 0

' ****************************
' Excel をアプリケーションとして終了
' ****************************
App.Quit()

' ****************************
' Excel を VBScript から開放
' ****************************
Set App = Nothing

' ****************************
' オブジェクト変数を初期化
' ( 初期化しないとオブジェクト扱いされる )
' ****************************
App = Empty


MsgBox( "処理が終了しました" )

Microsoft ドキュメント

Application.GetSaveAsFilename メソッド (Excel)

Application.GetOpenFilename メソッド (Excel)

Worksheets.Add メソッド (Excel)


関連する記事

VBScript : 既存の Excel を PDF に変換する ( Excel 2007以降 )





タグ:VBScript EXCEL
posted by lightbox at 2018-05-27 01:20 | VBS + オブジェクト | このブログの読者になる | 更新情報をチェックする
container 終わり

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

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