starzware

ITスキル

PL/SQL

TIPS
ひな型

-- PACKAGE
CREATE OR REPLACE PACKAGE PKG_XXXXX
AS
--
PROCEDURE xxxx(ret OUT NUMBER);
--
END PKG_XXXXX;
/
-- PACKAGE BODY
CREATE OR REPLACE PACKAGE BODY PKG_XXXXX
AS
--
PROCEDURE xxxx(ret OUT NUMBER)
AS
BEGIN
END xxxx;
--
END PKG_XXXXX;
/
IF

IF TRIM(AAA) IS NULL THEN
END IF;
エラー捕捉

BEGIN
  SELECT 1 FROM DUAL;
EXCEPTION
  WHEN NO_DATA_FOUND THEN --データなしエラー
    RETURN;
  WHEN OTHERS THEN  --その他のエラー(catch対象以外の場合)
    -- SQLERR_CD : SQLエラーコード
    -- SQLERRM   : SQLエラーメッセージ
    RAISE_APPLICATION_ERROR(SQLERR_CD||SQLERRM);
END;
SELECT INTO

v_xxx VARCHAR(100) DEFAULT NULL;
-- 取得したa.xxxの内容を変数v_xxxに入れる
SELECT a.xxx
INTO v_xxx
FROM a_tbl;
カーソル

--宣言
CURSOR CUR_A IS select * from a_tbl;
REC_A CUR_A%ROWTYPE;
--フェッチ
OPEN CUR_A;
FETCH CUR_A IN REC_A;
-- ループ
OPEN CUR_A;
FOR REC_A IN CUR_A
LOOP
END LOOP;
--カーソルを閉じる
CLOSE CUR_A;
カーソル属性
%FOUND(フェッチ後)データあり
%NOTFOUND(フェッチ後)データなし
%ROWCOUNT件数
%ROWTYPE選択したフィールド全体
全角チェック

CREATE OR REPLACE FUNCTION F_ZENKAKU(
  PARAM1 IN VARCHAR2
) RETURN INTEGER
IS
  RET INTEGER;  -- 0:全角, -1:半角あり
  WORK VARCHAR2(1000);
BEGIN
  RET := 0;
  FOR CNT IN 1..LENGTH(PARAM1) LOOP
    WORK := SUBSTR(PARAM1, CNT, 1);
    IF LENGTH(WORK) = LENGTHB(WORK) THEN
      RET := -1;
      EXIT;
    END IF;
  END LOOP;
  RETURN RET;
END;
空白をTRIMすると

LENGTH(TRIM('   '))はNULL(0にならない)
xxxxxx

-- 変数宣言の際にNOT NULLを付けると、代入の度にNULLチェックが行なわれる
v NUMBER NOT NULL := 0;
-- NOT NULLが不要であれば外す
v NUMBER := 0;