PL/SQL勉強メモ
- Oracle Database 11g Express Editionインストール
途中で聞かれるパスワードはSYS,SYSTEMユーザに適用される。
デフォルトのセットアップ情報
宛先フォルダ:C:\oraclexe\
Oracleホーム: C:\oraclexe\app\oracle\product\11.2.0\server\
Oracleベース:C:\oraclexe\
'Oracle Databaseリスナー'のポート: 1521
'Oracle Services for Microsoft Transaction Server'のポート: 2030
'Oracle HTTPリスナー'のポート: 8080
- SQL*Plusのコンソールからデータベースの起動
DOSコマンドプロンプトからSQL*Plus起動
>sqlplus /NOLOG
SQL>CONNECT system/zxcvbnm AS SYSDBA
SQL>STARTUP
systemはユーザ名(最初から登録されている)
zxcvbnmはパスワード(インストールする時に入力しているはず)
とりあえず新しくユーザを追加して作業をする。
ユーザ作成構文
CREATE USER my_name
IDENTIFIED BY "my_password"
[DEFAULT TABLESPACE my_tablespace]
[TEMPORARY TABLESPACE my_temp_tablespace]
[PROFILE my_profile]
OS認証で SYSDBA に接続。NETのサンプル通り、深くは追求しない…
CONNECT / AS SYSDBA
TEST_USER追加
CREATE USER TEST_USER IDENTIFIED BY "TEST_USER"
テスト用なので権限拡大と使用容量を無限にしておく。
GRANT DBA TO TEST_USER;
GRANT UNLIMITED TABLESPACE TO TEST_USER;
SELECT * FROM all_users;
CREATE TABLE working
(
id NUMBER NOT NULL PRIMARY KEY,
dt DATE,
name VARCHAR2(24)
);
CREATE TABLE log
(
-- id NUMBER NOT NULL IDENTITY,
logtime TIMESTAMP NOT NULL,
msg VARCHAR2(48)
);
DROP TABLE working;
DESCRIBE working
INSERT INTO working
(id, dt, name)VALUES(1, '2000/01/01', 'AAA');
INSERT INTO log
(logtime, msg)VALUES(CURRENT_TIMESTAMP, 'AAA');
DECLARE
cnt NUMBER;
BEGIN
cnt := 0;
LOOP
EXIT WHEN cnt >= 10;
cnt := cnt + 1;
END LOOP;
END;
※DBMS_OUTPUTパッケージを使用して変数の内容を表示している。
デフォルトでは表示がOFFになっているため以下でONにする必要がある。
SET SERVEROUTPUT ON
DECLARE
row working%ROWTYPE;
row0 VARCHAR2(24);
row1 VARCHAR2(24);
row2 VARCHAR2(24);
BEGIN
SELECT * INTO row FROM working WHERE id=1;
SELECT * INTO row0,row1,row2 FROM working WHERE id=1;
DBMS_OUTPUT.PUT_LINE(row0 || ', ' || row1 || ', ' || row2);
DBMS_OUTPUT.PUT_LINE(row.id || ', ' || row.dt || ', ' || row.name);
END;
DECLARE
CURSOR cur IS SELECT * FROM working;
row cur%ROWTYPE;
BEGIN
OPEN cur;
LOOP
FETCH cur INTO row;
EXIT WHEN cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(row.id || ', ' || row.dt || ', ' || row.name);
END LOOP;
CLOSE cur;
END;
オラクルが提供するPL/SQLパッケージ「UTL_FILE」を使用してファイル出力を行う。
--TEST_USERに実行権限を与える
CONNECT / AS SYSDBA
GRANT EXECUTE ON UTL_FILE TO TEST_USER;
--ディレクトリオブジェクト一覧を確認
SELECT * FROM ALL_DIRECTORIES;
--ディレクトリオブジェクト作成
CREATE DIRECTORY temp AS 'C:\temp\';
--ディレクトリオブジェクトのアクセス権限を付与
GRANT READ,WRITE ON DIRECTORY temp TO TEST_USER;
--ファイル出力
DECLARE
fh UTL_FILE.FILE_TYPE;
BEGIN
--ファイルオープン ※ディレクトリオブジェクト名は大文字じゃないとエラーになる
fh := UTL_FILE.FOPEN('TEMP', 'test2.txt','w');
UTL_FILE.PUT_LINE(fh,'testtest');
UTL_FILE.FCLOSE(fh);
END;
2015-02-27 17:58:08 (Fri);
最終更新:2015年02月27日 17:58