Today: Yesterday: Total: Online:
カテゴリー
その他
  • RSS1.0
  • RSS2.0
  • atom0.3
  • valid XHTML1.0
  • valid CSS2
  • Credit
RSSリーダーで購読する | この日記のはてなブックマーク数 | プロフィール
コメントが一番多い記事(233コメント):人の心理の裏をかくホームページ集客術:リピータになってもらうためには
ツイートが一番多い記事(94ツイート):ちょっと待て!twitterやfacebookに子供の写真を掲載する親達への警告
いいねが一番多い記事(574いいね):facebookスパムに要注意。なりすましの見分け方とアカウント乗っ取りの手口(2013年度版)

[ カテゴリー » SQL » PL/SQL ]

カテゴリー » SQL » PL/SQL January 11, 2011

PL/SQL 動的SQL EXECUTE IMMEDIATE ID:1294724556


http://oracle.se-free.com/plsql/d4_dyncur.html
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl09.htm

— posted by midilin @ 02:42PM

カテゴリー » SQL » PL/SQL January 11, 2011

PL/SQL FETCHとカーソル属性 ID:1294723382


declare
jcrec 受注m%rowtype;
cursor cu is select * from 受注m where 品番 = 'a001';
begin
open cu;
loop
fetch cu into jcrec;
exit when cu%notfound;
dbms_output.put_line (jcrec.受注番号);
end loop;
close cu;
end;




カーソル%found fetch が行を戻せば TRUE
カーソル%isopen オープンされていれば TRUE
カーソル%notfound fetch が行を戻さなければ TRUE
カーソル%rowcount fetch された行数


http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl05.htm

— posted by midilin @ 02:23PM

カテゴリー » SQL » PL/SQL January 11, 2011

PL/SQL type %type属性 ID:1294720952


●変数名 表名.列名%TYPE;・・・Type属性

テーブルの列の型と同じ型で変数が定義される。
(簡単に言うと、「1つの列」のみ)
テーブルの型変更に、PL/SQLを変更しないで済むメリットがある。
(データベースのある列のデータ型が変わったときに、その列の値を格納する内部変数の宣言を変えなくてよい、ということ)
NOT NULL制約のある列でも、変数にNOT NULLは適用されないのでNULLの代入が可能

・表「emp」の列「emp_name」の型で、変数”empname”を定義する。
declare
empname emp.emp_name%type;
:
:

●変数名 表名%ROWTYPE;
%ROWTYPE は表から取得したレコード全体を定義できる。
(簡単に言うと、「テーブル全体」)

declare

-- %ROWTYPEを宣言
dept_rec dept%rowtype;

begin

-- SELECT INTO句でDEPT表を代入
select * into dept_rec from dept where dept_id = 'D01';

dbms_output.put_line(dept_rec.dept_id);
dbms_output.put_line(dept_rec.dept_name);

end;


●typeによる宣言
DECLARE
TYPE 表名 IS TABLE OF データ型
INDEX BY BINARY_INTEGER;
BEGIN

END

TYPE文で型を宣言し、その型を使用して表宣言を行う。

== 例 ==
DECLARE
 TYPE ary_num IS TABLE OF NUMBER
  INDEX BY BINARY_INTEGER;
 a_empno ary_num;
 a_sal   ary_num;
 CURSOR c1 IS
  SELECT empno, sal FROM emp ORDER BY empno;
 cnt    NUMBER;
BEGIN
 cnt := 0;
 FOR rec IN c1 LOOP
  cnt := cnt + 1;
  a_empno( cnt ) := rec.empno;
  a_sal( cnt ) := rec.sal;
 END LOOP;
END;


http://oracle.se-free.com/plsql/d1_rowtype.html
http://www.t3.rim.or.jp/~buchi/plsql/sld027.htm

— posted by midilin @ 01:42PM

カテゴリー » SQL » PL/SQL January 11, 2011

PL/SQL ループ for / while / loop ID:1294719160


・FOR による繰り返し処理

-- 1 〜 3 の 3 回ループ
FOR i IN 1..3 LOOP
DBMS_OUTPUT.PUT_LINE('ループ変数 i = ' || i);
END LOOP;

・WHILE ループ

WHILE (1=1) LOOP
DBMS_OUTPUT.PUT_LINE('呼び出されます');
EXIT WHEN (1=1) ;
DBMS_OUTPUT.PUT_LINE('呼び出されません');
END LOOP;
DBMS_OUTPUT.PUT_LINE('呼び出されます');

・LOOP 〜

LOOP
DBMS_OUTPUT.PUT_LINE('呼び出されます(1-1)');
IF (1=1) THEN
EXIT ;
END IF;
DBMS_OUTPUT.PUT_LINE('呼び出されません(1)');
END LOOP;


http://www.shift-the-oracle.com/plsql/for-while-loop.html

— posted by midilin @ 01:12PM

カテゴリー » SQL » PL/SQL January 11, 2011

PL/SQL 「:=」 ID:1294714239


PL/SQL 「:=」
は、代入を意味する。

変数宣言等で使う。

varname vartype;
varname vartype := 初期値;
varname vartype default デフォルト値;
varname vartype not null := 初期値;
varname vartype := 式;
varname vartype := 変数;
constname constant vartype := 定数;

shimei varchar2(20);
ritsu number(12, 2) := 1.25;
ritsu number(12, 2) default 1.25;
ritsu number(12, 2) not null := 1.25;
atai number(12) : = 100 * ritsu;
DT_MAX constant number := 99;

C 言語の int a, b のような複数変数を一度に宣言することはできない。
変数のスコープは、begin...end; 内である。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl01.htm

— posted by midilin @ 11:50AM

カテゴリー » SQL » PL/SQL January 11, 2011

PL/SQL コメント方法 ID:1294714024


-- 1 行注釈
/* 複数行注釈開始
*/ 複数行注釈終了

1 行注釈は、Execute コマンド等の begin...end; ブロックなどでは使えない。
/* 1 行注釈 */ のようにして使うと良い。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl01.htm

— posted by midilin @ 11:47AM


カウンター