PLSQL メモ


%TYPE型
テーブルの列の型と同じ型で変数を定義。
変数名 表名.列名%TYPE; 

%ROWTYPE型
%ROWTYPE は表から取得したレコード全体を定義できる。
 %ROWTYPE.列名で参照。
変数名  表名%ROWTYPE;
 または
変数名  カーソル名%ROWTYPE;

レコード型
type レコード変数名 is record (列名 データ型, 列名 データ型, );

代入
変数 := 値;
 
無名ブロック
--------------------------------------
declare

変数名 変数の型;

begin

本処理;

exception

エラー処理;

end;
----------------------------------------

コメント
/*  */
/* 複数行のコメント
  が可能 */  

--
-- コメント1行のみ 

-----------------------------------------

IF文

declare
    num number := 1;
begin
  if num = 1 then
    DBMS_OUTPUT.PUT_LINE('1だお');
  else
    null;
  end if;
end;


DBMS_OUTPUTパッケージを使用する時は
SQLPlusで
SET SERVEROUT ON
を設定する。

-------------------------------------------------------

CASE文

declare
 vid char(1) := 'B';
begin
 case vid
 when 'A' then
  dbms_output.put_line('Aだお');
 when 'B' then
  dbms_output.put_line('Bだお');
 else
  dbms_output.put_line('なんぞこれ');
 end case;
end;

-----------------------------------------------------------

WHILE文

declare
-- 計算に使用するため、binary_integer型
 cnt binary_integer := 0;
begin
 while cnt < 10 loop
  dbms_output.put_line('1-9:' || cnt);
  cnt := cnt + 1;
 end loop;
end;

-----------------------------------------------------------------
FILE IO

declare
  file_id     utl_file.file_type;
  file_path   varchar2(20) := '/home/oracle/';
  file_name   varchar2(20) := 'hogehoge.txt';
  rec         varchar2(20);

begin
  file_id := utl_file.fopen(file_path,file_name,'A');
 
     utl_file.put_line(file_id,'');
     rec := 'aaaaaaaaaaaa';
     utl_file.put_line(file_id, rec);

     utl_file.fclose(file_id);
end;
----------------------------------------------------------------------
PLSQLコンパイルエラーが発生した場合
SQLPlusで
show errors
を実施して確認する。

------------------------------------------------------------
プロシジャー作成

create or replace procedure get_dept (
 v_dept_no in char,
 v_dept_name out varchar2) as
begin
select dname into v_dept_name from dept
where deptno = v_dept_no;
end get_dept;

プロシジャー実行

declare
disp_dept_name varchar2(10);
begin

get_dept(v_dept_no => '10',v_dept_name  => disp_dept_name);
dbms_output.put_line(disp_dept_name);

end;
--------------------------------------------------------------------
ファンクション
 RETURN句は、必須
---------------------------------------------------------------------
カーソル

declare

cursor カーソル変数名 is select文;
レコード変数 カーソル変数名%ROWTYPE;

begin

open カーソル変数名; 

  loop
  fetch カーソル変数名 into レコード変数;
  exit when カーソル変数名%notfound;

  処理
  end loop

close カーソル変数名; 

end;


---------------------------------------------------------------------
例外処理
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error');
    DBMS_OUTPUT.PUT_LINE(SQLERRM);

--------------------------------------------------------------------
入れ子ブロックのエラー時に全体処理を中止する。
RAISE または
RAISE ユーザ定義例外名

---------------------------------------------------------------------
オーバーロード
 同じ名前(引数の数、順序、型は異なる)のサブプログラムを定義できる

----------------------------------------------------------------------
コンパイル
ALTER PROCEDURE 名前 COMPILE;
ALTER PACKAGE   名前 COMPILE BODY;

[一つ前に戻る] TOP PAGE
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送