PL/SQLメモ

#データベースに関する情報の取得###########################################################
■テーブル一覧を取得する
select * from tab;

■あるテーブルの列名を取得する
desc 表名;(;は省略可)

■ユーザ一覧を取得する
select username from user_users;

■インデックス一覧を取得する
select * from user_ind_columns;
※指定した表のインデックスのみ、表示することもできます。
select column_name from user_ind_columns where table_name = '表名';



#エディタの使用方法#######################################################################
■oracleへの接続
  • コンピュータの管理⇒サービスより、以下を起動
 OracleOraHome92TNSListener
 OracleServiceCOMP1
  • コマンドプロンプトで、sqlplusと入力
  • ユーザー名=scott、パスワード=tigerを入力


■エディタの使用方法
.┘妊タの起動(新たにファイルを作成するを選択)
 EDIT sample1

▲瓮眥⊂紊PL/SQLを記述し、保存
※C:\oracle\ora92\binに格納される

ファイルを実行
 @sample1



#PL/SQLの記述############################################################################
■デバック文
sqlplusの環境変数:serveroutputをonにする
set serveroutput on

▲妊丱奪文を記述
DBMS_OUTPUT.PUT_LINE('TEST1');


■大文字と小文字
基本的に区別されない


■ストアド・サブプログラム
PL/SQLがコンパイル済みの状態で、oracleに格納されたもの


■基本構造
DECLARE
 宣言部
BEGIN
 実行部
EXCEPTION
 例外処理部
END;


■変数の代入
DECLARE
 hensuu1 NUMBER
BEGIN
 hensuu1 := 10
END;


■変数のデータ型
.好ラー型:oracleが事前に定義している
 NUMBER, CHAR, VARCHAR2, DATE, BOOLEAN

▲灰鵐櫂献奪鳩拭oracleが事前に定義している
 RECORD, TABLE

参照型:oracleが事前に定義している
 REF CURSOR


■テーブルのデータ型を使用する
%TYPE ⇒ある列のデータ型
  • 変数の宣言
 hennsuu1 dept.depno%TYPE;
  • 変数の使用
 SELECT deptno
  INTO hennsuu1
  FROM dept
  WHERE location = 'NEW YORK';

%ROWTYPE ⇒テーブルのある行のデータ型
  • 変数の宣言
 dept_row dept%ROWTYPE;
  • 変数の使用
 SELECT deptno, dname, location
  INTO dept_row
  FROM dept
  WHERE deptno = 10;


■分岐
IF文(比較には“=”を使用)
IF hensuu1 = 10 THEN
 /* 処理1 */
ELSE
 /* 処理2 */
END IF;


CASE文
CASE hensuu1
 WHEN 10 THEN
  /* 処理1 */
 WHEN 20 THEN
  /* 処理2 */
 ELSE
  /* 処理3 */
END CASE;


■ループ
LOOP
LOOP
 EXIT WHEN count=3;
 /* 処理 */
END LOOP;


FOR
FOR count IN 1..3 LOOP
 /* 処理 */
END LOOP;


WHILE
WHILE count<3 LOOP
 /* 処理 */
END LOOP;



■取得結果を変数に格納する
SELECT 〜 INTO ・・・

▲ーソル
  • カーソルの定義
 CURSOR emp_cur
 IS SELECT empno,ename FROM emp WHERE deptno = 10;

  • 格納用変数の定義
 emp_rec emp_cur%ROWTYPE;

  • カーソルの実行
 OPEN emp_cur;

  • 変数への格納
 LOOP
  FETCH emp_cur INTO emp_rec;
  EXIT WHEN emp_cur%NOTFOUND;
  DBMS_OUTPUT.PUT_LINE(emp_rec.empno||' '||emp_rec.ename);
 END LOOP;

  • カーソルのクローズ
 CLOSE emp_cur;


■カーソルFORループ
  • カーソルの定義
 CURSOR emp_cur
 IS SELECT empno,ename FROM emp WHERE deptno = 10;

  • カーソルの実行、変数への格納、カーソルのクローズ
 FOR emp_rec IN emp_cur LOOP
  DBMS_OUTPUT.PUT_LINE(emp_rec.empno||' '||emp_rec.ename);
 END LOOP;


■カーソル処理中のループからの脱出
 LOOP
  FETCH emp_cur INTO emp_rec;
  EXIT WHEN emp_cur%NOTFOUND; /* 明示カーゾル属性のNOTFOUND */
  DBMS_OUTPUT.PUT_LINE(emp_cur%ROWCOUNT);
 END LOOP;


■例外処理
ー孫塢
SELECT empno INTO e_empno FROM emp;

⇔祿綾萢部
EXCEPTION
 WHEN too_many_rows THEN /* 2行以上を返す場合 */
  DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS!');
 WHEN no_data_found THEN /* 1行も返さない場合 */
  DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND!');
2006年06月30日(金) 02:11:24 Modified by alivealive




スマートフォン版で見る

×

この広告は60日間更新がないwikiに表示されております。