%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;
|