http://www.shift-the-oracle.com/sql/create-table.html
CREATE TABLE USER_MASTER
(
USER_ID VARCHAR2(8) NOT NULL,
DEPT_NO VARCHAR2(8),
USER_NAME VARCHAR2(32),
CREATED_ON DATE DEFAULT SYSDATE,
MODIFIED_ON DATE
);
--■■■■■■■■■■■■■■■■■プライマリキーを作成するDDL文■■■■■■■■■■■■■■■■■
ALTER TABLE USER_MASTER ADD CONSTRAINT USER_MASTER_PK PRIMARY KEY (USER_ID) ;
--■■■■■■■■■■■■■■■■■テーブル一覧 ■■■■■■■■■■■■■■■■■
select table_name from user_tables;
--■■■■■■■■■■■■■■■■■UPDATE■■■■■■■■■■■■■■■■■
UPDATE (
SELECT
USER_ID, USER_NAME
FROM USER_MASTER
) -- [ ビューの別名 ]
SET
USER_NAME = USER_NAME || ' さま';
--■■■■■■■■■■■■■■■■■レコード削除 ■■■■■■■■■■■■■■■■■
-- USER_ID = '0020' OR USER_ID ='0019' を削除
DELETE
FROM USER_MASTER
WHERE USER_ID IN ('0020', '0019');
--■■■■■■■引数ありのカーソル■■■■■■
------------------------------------------------------------------------------
-- カーソル定義
------------------------------------------------------------------------------
CURSOR CJIDO(p_START IN NUMBER, --引数ありのカーソルを作成
p_END IN NUMBER,
p_KIJUNBI IN NUMBER) IS
SELECT A.KOJIN_NO,
A.SHIMEI_KANA,
A.SHIMEI_KANJI,
FROM EAT_ATENAKIHON A
WHERE A.SEINENGAPI BETWEEN p_START AND p_END
AND A.GENZON_KBN < 3;
CRJIDO CJIDO%ROWTYPE; --カーソルにある、全てのテーブル列型を取得、
******呼び出し元*******
FOR CRJIDO IN CJIDO(ISTART,IEND,V_KIJUNBI) LOOP --カーソルの呼出
DBMS_OUTPUT.PUT_LINE(CRJIDO.KOJIN_NO);
END LOOP;
--■■■■■■テーブルを使ったコレクション■■■■■■
-- 取得したデータのワーク領域
TYPE MTJIDO_TYPE IS TABLE OF EQT_SEIJINSYA%ROWTYPE INDEX BY BINARY_INTEGER;
MJIDO_WORK MTJIDO_TYPE;
MJIDO_WORK(1).「カラム名」:= 'TEST'; --文字列を代入
--■■■■■■動的SQL■■■■■■
DBMS_SQL.DEFINE_COLUMN(カーソル変数名, 位置, 変数名, サイズ);
--■■■■■■定数の宣言■■■■■■
--定数名 定数指定 データ型 初期値;
--初期値を設定しない場合はNULLになります。
NUM CONSTANT PLS_INTEGER := 10;
--■■■■■■例外処理EXCEPTION■■■■■■
BEGIN
BEGIN
SELECT 「カラム名」 INTO 「カラムのデータ型」 FROM 「テーブル名」WHERE 「カラム名」= 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN --SQLが行をもどさない場合の例外
DBMS_OUTPUT.PUT_LINE(SQLCODE);
WHEN OTHERS THNE
DBMS_OUTPUT.PUT_LINE(SQLCODE); --全ての例外を出力
END;
END;
--■■■■■■ユーザ定義例外処理EXCEPTION■■■■■■
BEGIN
IS
uSER_eXCEPTION EXCEPTION; --ユーザ定義例外を宣言
BEGIN
SELECT 「カラム名」 INTO 「カラムのデータ型」 FROM 「テーブル名」WHERE 「カラム名」= 1;
RAISE uSER_eXCEPTION; --ユーザ定義例外の呼出
EXCEPTION
WHEN uSER_eXCEPTION THEN
DBMS_OUTPUT.PUT_LINE('ユーザ定義例外の呼出です');
END;
END;
--■■■■■FOR UPDATE句■■■■■■
BEGIN
IS
CURSOR c_1 IS
SELECT 「カラム名」
INTO 「カラムのデータ型」
FROM 「テーブル名」
WHERE 「カラム名」> 100
FOR UPDATE NOWAIT; --ロックが解放されるのを待たずに、プログラムにもどり、例外が発生します。
BEGIN
OPEN c_1
FOR r_1 IN c_1 LOOP;
UPDATE(SELECT r_1.「カラム名」FORM 「テーブル名」) SET 「カラム名」= 'レコード';
COMMIT;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ロックが掛かっているか、行がありません');
END;
END;
--■■■■■プロシジャーの作成■■■■■■
CREATE OR REPLACE PROCEDURE proc_1(
i1 IN PLS_INTEGER; --引数
i2 IN PLS_INTEGER;
) RETURN PLS_INTEGER IS
USER_i_1 PLS_INTEGER; --フィールド変数
USER_i_2 PLS_INTEGER;
BEGIN
実行部;
RETURN 0;
END;
CREATE TABLE USER_MASTER
(
USER_ID VARCHAR2(8) NOT NULL,
DEPT_NO VARCHAR2(8),
USER_NAME VARCHAR2(32),
CREATED_ON DATE DEFAULT SYSDATE,
MODIFIED_ON DATE
);
--■■■■■■■■■■■■■■■■■プライマリキーを作成するDDL文■■■■■■■■■■■■■■■■■
ALTER TABLE USER_MASTER ADD CONSTRAINT USER_MASTER_PK PRIMARY KEY (USER_ID) ;
--■■■■■■■■■■■■■■■■■テーブル一覧 ■■■■■■■■■■■■■■■■■
select table_name from user_tables;
--■■■■■■■■■■■■■■■■■UPDATE■■■■■■■■■■■■■■■■■
UPDATE (
SELECT
USER_ID, USER_NAME
FROM USER_MASTER
) -- [ ビューの別名 ]
SET
USER_NAME = USER_NAME || ' さま';
--■■■■■■■■■■■■■■■■■レコード削除 ■■■■■■■■■■■■■■■■■
-- USER_ID = '0020' OR USER_ID ='0019' を削除
DELETE
FROM USER_MASTER
WHERE USER_ID IN ('0020', '0019');
--■■■■■■■引数ありのカーソル■■■■■■
------------------------------------------------------------------------------
-- カーソル定義
------------------------------------------------------------------------------
CURSOR CJIDO(p_START IN NUMBER, --引数ありのカーソルを作成
p_END IN NUMBER,
p_KIJUNBI IN NUMBER) IS
SELECT A.KOJIN_NO,
A.SHIMEI_KANA,
A.SHIMEI_KANJI,
FROM EAT_ATENAKIHON A
WHERE A.SEINENGAPI BETWEEN p_START AND p_END
AND A.GENZON_KBN < 3;
CRJIDO CJIDO%ROWTYPE; --カーソルにある、全てのテーブル列型を取得、
******呼び出し元*******
FOR CRJIDO IN CJIDO(ISTART,IEND,V_KIJUNBI) LOOP --カーソルの呼出
DBMS_OUTPUT.PUT_LINE(CRJIDO.KOJIN_NO);
END LOOP;
--■■■■■■テーブルを使ったコレクション■■■■■■
-- 取得したデータのワーク領域
TYPE MTJIDO_TYPE IS TABLE OF EQT_SEIJINSYA%ROWTYPE INDEX BY BINARY_INTEGER;
MJIDO_WORK MTJIDO_TYPE;
MJIDO_WORK(1).「カラム名」:= 'TEST'; --文字列を代入
--■■■■■■動的SQL■■■■■■
DBMS_SQL.DEFINE_COLUMN(カーソル変数名, 位置, 変数名, サイズ);
--■■■■■■定数の宣言■■■■■■
--定数名 定数指定 データ型 初期値;
--初期値を設定しない場合はNULLになります。
NUM CONSTANT PLS_INTEGER := 10;
--■■■■■■例外処理EXCEPTION■■■■■■
BEGIN
BEGIN
SELECT 「カラム名」 INTO 「カラムのデータ型」 FROM 「テーブル名」WHERE 「カラム名」= 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN --SQLが行をもどさない場合の例外
DBMS_OUTPUT.PUT_LINE(SQLCODE);
WHEN OTHERS THNE
DBMS_OUTPUT.PUT_LINE(SQLCODE); --全ての例外を出力
END;
END;
--■■■■■■ユーザ定義例外処理EXCEPTION■■■■■■
BEGIN
IS
uSER_eXCEPTION EXCEPTION; --ユーザ定義例外を宣言
BEGIN
SELECT 「カラム名」 INTO 「カラムのデータ型」 FROM 「テーブル名」WHERE 「カラム名」= 1;
RAISE uSER_eXCEPTION; --ユーザ定義例外の呼出
EXCEPTION
WHEN uSER_eXCEPTION THEN
DBMS_OUTPUT.PUT_LINE('ユーザ定義例外の呼出です');
END;
END;
--■■■■■FOR UPDATE句■■■■■■
BEGIN
IS
CURSOR c_1 IS
SELECT 「カラム名」
INTO 「カラムのデータ型」
FROM 「テーブル名」
WHERE 「カラム名」> 100
FOR UPDATE NOWAIT; --ロックが解放されるのを待たずに、プログラムにもどり、例外が発生します。
BEGIN
OPEN c_1
FOR r_1 IN c_1 LOOP;
UPDATE(SELECT r_1.「カラム名」FORM 「テーブル名」) SET 「カラム名」= 'レコード';
COMMIT;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ロックが掛かっているか、行がありません');
END;
END;
--■■■■■プロシジャーの作成■■■■■■
CREATE OR REPLACE PROCEDURE proc_1(
i1 IN PLS_INTEGER; --引数
i2 IN PLS_INTEGER;
) RETURN PLS_INTEGER IS
USER_i_1 PLS_INTEGER; --フィールド変数
USER_i_2 PLS_INTEGER;
BEGIN
実行部;
RETURN 0;
END;
0 件のコメント:
コメントを投稿