質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

Q&A

解決済

1回答

505閲覧

IF文の条件分岐の書き方、どのようにYYYYMM型にするのか

jingjing

総合スコア8

Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

0グッド

0クリップ

投稿2020/08/04 06:32

コードCREATE OR REPLACE PROCEDURE vs_five50( V_PLACE IN NUMBER, --处理对象 V_DATE IN VARCHAR2, --年月 YYYYMM形式 V_GOODS_CD IN VARCHAR2, --商品code V_CUST_CD IN VARCHAR2 --顧客code ) IS BEGIN --IF文を使って分岐させたいです --INパラメータで年月が入ってくるのですがもし、その年月がyyyymm形式でないなら。 IF THEN DBMS_OUTPUT.PUT_LINE('OK); --また下2桁が06、20以外の場合 ELSIF THEN DBMS_OUTPUT.PUT_LINE('NG'); END IF; END vs_five50; / ```**ボールドテキスト** コードの中にコメントが入っているように、条件分岐をしたいのですが、いまいちよくわからないです。 なんとなく、TO_CHARやSUBSTRを使うんじゃないかなと予測しているのですが、自分でいろいろやってみたのですが、 全部エラーになってしまい、お手上げ状態です。 わかる方よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のFUNCTIONを作っては?

SQL

1CREATE OR REPLACE FUNCTION IS_YYYYMM 2 ( 3 IN_YYYYMM IN VARCHAR2 -- YYYYMM 4 ) 5 RETURN VARCHAR2 -- 'OK' or 'NG' 6-- 年月 YYYYMM が妥当な内容か判断する。 7IS 8 V_DATE DATE ; 9BEGIN 10 V_DATE := TO_DATE(IN_YYYYMM, 'YYYYMM') ; 11 RETURN('OK') ; 12EXCEPTION 13 WHEN OTHERS THEN 14 RETURN('NG') ; -- エラー 15END IS_YYYYMM ; 16/

PROCEDURE を修正

SQL

1CREATE OR REPLACE PROCEDURE vs_five50( 2 V_PLACE IN NUMBER, --处理对象 3 V_DATE IN VARCHAR2, --年月 YYYYMM形式 4 V_GOODS_CD IN VARCHAR2, --商品code 5 V_CUST_CD IN VARCHAR2 --顧客code 6 ) 7IS 8BEGIN 9 IF IS_YYYYMM(V_DATE) = 'NG' THEN -- 年月がyyyymm形式でないなら 10 DBMS_OUTPUT.PUT_LINE(V_DATE || ' INVALID YYYYMM'); 11 12 ELSIF SUBSTR(V_DATE, 5, 2) NOT IN('06', '10') THEN -- 下2桁が06、20以外の場合 13 DBMS_OUTPUT.PUT_LINE(V_DATE || ' MM NOT IN(06,10)'); 14 ELSE 15 DBMS_OUTPUT.PUT_LINE(V_DATE || ' NG'); 16 END IF; 17END vs_five50; 18/

実行していませんが。
字下げはきちんと。コードが雑過ぎです。

投稿2020/08/04 06:57

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jingjing

2020/08/04 11:54

助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問