変数
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