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 27, 2011

FETCHとは ID:1296088050


FETCHとは「取り出す」ということ。
カーソルのときに使用する。

— posted by midilin @ 09:27AM

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

PL/SQL ネストしたループ文から脱出する ID:1296087551


ラベルを指定して、ラベル EXITを使う

ラベルは<<>>で定義する。



例)

<<LOOP1>>

FOR i IN 1..10 LOOP

<<LOOP2>>

FOR j IN 1..10 LOOP

<LOOP3>

FOR k IN 1..10 LOOP

SELECT COUNT(*) INTO ctr WHELE ...

.....



EXIT LOOP2;---ラベルを指定して、LOOP3からLOOP2に脱出

END ROOP3;

END ROOP;

-- EXIT LOOP2とするとここにとぶ

END LOOP;

— posted by midilin @ 09:19AM

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

PL/SQL パッケージ PACAGE BODY ID:1296087242


パッケージとは、プロシージャやファンクションをまとめたもの
パッケージは、仕様部と実装部からなる

仕様部はC言語のヘッダファイルのように、関数の引数と戻り値だけを定義する。
ファンクションやプロシージャの中身は、別途実装部のPACAGE BODYに定義する。

利用者は仕様部さえ変わらなければ、ファンクションやプロシージャの実装がどうなっていても
自分のコードがかけ、実装部(PACAGE BODY)ができていなくても、コンパイルができる

— posted by midilin @ 09:14AM

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

プロシージャの作成 ID:1296087014


CREATE OR REPLACE PROCEDURE プロシージャ名(引数) IS PL/SQLブロック;

OR REPLACEは最初の一回は不要だが、変更時にDROP PROCEDUREをしなくてすむ

— posted by midilin @ 09:10AM

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

コンポジット型 配列 PL/SQL ID:1296086762


例)
DECLARE
--varchar2(32)の索引を持つ、varchar2(15)の索引付きのhosttable_typeの宣言:15は、ipが3桁×4+ドットが3個
TYPE hosttable_type IS TABLE OF VARCHAR2(15) INDEX BY VARCHAR2(32);
--hosttable_typeを宣言
host_table hosttable_type;
ip_address VARCHAR2(15);
BEGIN
host_table('dbserver1') := '192.168.0.1';
host_table('dbserver2') := '192.168.0.2';
ip_address := host_table('dbserver1');--192.168.0.1が返却される

— posted by midilin @ 09:06AM

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