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 ]

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

PL/SQL DECLARE ID:1295577381


DECLAREとは宣言部のこと。
実行部の開始を表すbeginが出現するまでの間の部分で、
一般にプロシージャやファンクションは
開始直後にその中で使う変数をすべて記述する。

つまり、変数や定数の宣言は
DECLAREとBEGINの間で行う。

— posted by midilin @ 11:36AM

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

PL/SQL で SELECT INTO を行なう ID:1295340407


PL/SQL で SELECT を行なうには SELECT 〜 INTO を使用して SELECT の結果を変数に代入する必要あり。


CREATE OR REPLACE PROCEDURE RIVUS.STEP01_SELECT
IS
vUserID USER_MASTER.USER_ID%TYPE;
vUserName USER_MASTER.USER_NAME%TYPE;
BEGIN
SELECT USER_ID, USER_NAME INTO vUserID, vUserName FROM USER_MASTER;
DBMS_OUTPUT.PUT_LINE('利用者IDは' || vUserID || 'です。');
DBMS_OUTPUT.PUT_LINE('利用者名は' || vUserName || 'さんです。');
END;
/
(しかし、このプログラムは抽出対象レコードが単一の場合しか使用できない)
http://www.shift-the-oracle.com/plsql/select.html

— posted by midilin @ 05:46PM

カテゴリー » SQL January 18, 2011

FETCH INTO ID:1295337016


表から取得した複数レコードの項目を、まとめてコレクションにセットする。

LIMITオプションで、一回に処理する件数を指定することもできる。


http://oracle.se-free.com/plsql/d9_bulk_fetch.html

— posted by midilin @ 04:50PM

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

Java で プロシージャ(PL/SQL)を使用する ID:1295237542


例)部門番号(DEPTNO)が10である社員の給与を2倍に増額(+100%)した後、1/2に減額(−50%)する


・プロシージャ

procedure give_raise (
p_deptno in number,
p_raise_percent in number )
as
begin
update emp set sal = sal + (sal * p_raise_percent * .01)
where deptno = p_deptno;

commit;
end give_raise;


・Java側
// CallableStatementを作成
sql_str2 = "{call GIVE_RAISE(?, ?)}";
cstmt = conn.prepareCall(sql_str2);

// INパラメータを設定 (給与を2倍に増額するよう設定します)
cstmt.setInt(1, 10);
cstmt.setInt(2, 100); // +100%

cstmt.executeUpdate();



// INパラメータを設定
cstmt.setInt(1, 10);(給与を1/2に減額するよう設定します)
cstmt.setInt(2, -50); // -50%

cstmt.executeUpdate();
http://www.atmarkit.co.jp/fjava/rensai/jdbc04/jdbc04_2.html

— posted by midilin @ 01:12PM

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

PL/SQLの実行方法 ID:1295226231


行頭に/を入れる

PRPCEDURE PROC_A(
a IN NUMBE,
b IN NUMBE,
c OUT NUMBE,
)

BEGIN
DECLARE
c NUMBER;
BEGIN
EXECUTE PROC_A(1,2,c);・・・・SQL*Plusのコマンドで、1つのPL/SQLを実行する
DBMS_OUTPUT.PUT_LINE(TO_CHAR(c));
END;
END;
/・・・・・・・・・・・・実行

— posted by midilin @ 10:03AM

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

ストアドプロシージャとストアドファンクションの違い ID:1295225607


ストアドプログラム・・・・DBに格納されたプログラムのこと。
ストアドプロシージャとストアドファンクションがあり、

ストアドプロシージャは
1つの引数と1つの戻り値を持つ


PROCEDURE A(
i_param IN NUMBER,
o_param OUT NUMBER)


ストアドファンクション

FUNCTION A(
i_param IN NUMBER)
RETURN NUMBER


ストアドプロシージャはSQL内の関数として使えないので
Aをストアドプロシージャとすると
select A(1) FROM DUAL
のようなことができない。

こういうように使う場合は、戻り値が1個だとしても
ファンクションとして定義する必要あり。

— posted by midilin @ 09:53AM

カテゴリー » 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 January 11, 2011

バインド変数とは ID:1294723886


データベースを操作するプログラムを作成する際に、
SQL文にプログラムの変数を埋め込むこと。
SQL文の解釈は一度だけ行われ、変数の展開は内部処理されるため、
プログラム側で変数を展開してSQL文を何度も生成するよりも
高速にデータベースの操作を行うことが可能となる。

http://e-words.jp/w/E38390E382A4E383B3E38389E5A489E695B0.html

— posted by midilin @ 02:31PM

カテゴリー » 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


カウンター