PL/SQLの変数宣言のまとめ
変数
declare
-- 初期値なしで変数宣言
v1 char(1);
-- 初期値ありで変数宣言
v2 varchar2(100) default 'ほげ';
-- 他の変数の型で変数宣言
v3 v2%type default 'ふが';
begin
dbms_output.put_line(v1);
dbms_output.put_line(v2);
dbms_output.put_line(v3);
end;
/
定数
declare
const_name constant varchar2(100) not null default '定数';
begin
dbms_output.put_line(const_name);
end;
/
------------------------------
-- 実行結果
------------------------------
定数
PL/SQLプロシージャが正常に完了しました。
定数値を変更しようとすると例外が発生します。
-- 定数値を変更するステートメントを追加した場合
const_name := '書き換え';
------------------------------
-- 実行結果
------------------------------
行5でエラーが発生しました。:
ORA-06550: 行5、列3:
PLS-00363: 式CONST_NAMEは割当てターゲットとして使用できません。
ORA-06550: 行5、列3:
PL/SQL: Statement ignored
NULL不可変数
declare
-- not nullを属性をつけることで、nullの代入がNGとなる。
v1 char(1) not null default '1';
begin
dbms_output.put_line(v1);
end;
/
procedureでnull不可の変数に「null」を代入しようとするとコンパイルエラーとなる
create or replace procedure hoge
is
-- 初期値なしで変数宣言
v1 char(1) not null default '1';
v2 char(1);
begin
v1 := null;
end;
/
LINE/COL ERROR
-------- -----------------------------------------------------------------
7/3 PL/SQL: Statement ignored
7/9 PLS-00382: 式の型が正しくありません。
procedureでnull不可の変数に別の変数の値を代入した場合、実行時エラーとなる
1 create or replace procedure hoge
2 is
3 -- 初期値なしで変数宣言
4 v1 char(1) not null default '1';
5 v2 char(1);
6 begin
7 v1 := v2;
8* end;
16:50:25 SQL> /
プロシージャが作成されました。
経過: 00:00:00.01
16:50:26 SQL> exec hoge
BEGIN hoge; END;
*
行1でエラーが発生しました。:
ORA-06502: PL/SQL: 数値または値のエラーが発生しました
ORA-06512: "HOGE", 行7
ORA-06512: 行1