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

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

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

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

2回答

18278閲覧

SQL 単体では実行できるが組み合わせるとエラーが出る

ta_ku0419

総合スコア13

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2018/07/09 05:07

編集2018/07/09 05:32

環境

PHP MVCモデル
フレームワーク CodeIgniter
DB Oracle

やっていること

あるテーブルの二つの値を用いて新しくレコードを作成している。
OSqlEditで実行すると正常に値が取得される。
PHPで元々実装されているSQLに組み込むとエラーが出る。

既にSELECTで指定されている最後の項目の後に[,]は入れています。

元々実装されているSQLはPHPでは実行できますが、OSqlEditで実行すると
「\」が「¥」に置き換えられ「式がありません」のエラーが出ます。


元々実装されているSQL

SQL

1SELECT MF_SISAKU_MAIN.SISKKNR_NO, MF_SISAKU_MAIN.TNT_CD, MF_SISAKU_MAIN.PAYMENT_CD, MF_SISAKU_MAIN.PAYMENT_TYPE,MF_SISAKU_MAIN.HSYCAL_KBN, MF_SISAKU_MAIN.HYKSIHYO_KBN,MF_SISAKU_MAIN.TNTBSY_CD, MF_SISAKU_MAIN.KOSIN_TIM, MF_SISAKU_MAIN.SISKDAT_SBT, MF_SISAKU_MAIN.PRIVATE_FLG, MF_SISAKU_MAIN.PAYAPLY_STAT,MF_SISAKU_MAIN.SISKAPLY_STAT,MF_SISAKU_MAIN.SIMU_STAT, HYKFROM_YM, HYKTO_YM, TKUISK_KNM, SISK_ID, SISK_KNM, HINGRP_KNM, HSY_KIN, PLN_KIN, JGN_KIN, SSKRYK_KNM, KNZSMEI_SEI_KNM, KNZSMEI_MEI_KNM,SISKJTI_KBN, SISKPTN_KBN, SISKOPE_STAT, TRKSAPLY_STAT, CATE_JTI.KNM AS CATE_JTI_KNM, CATE_SBT.KNM AS CATE_SBT_KNM, PAY.PAYMENT_KNM,SIMU_SBT.KNM AS SIMU_SBT_KNM,MKH_SBT.KNM AS MKH_SBT_KNM,CASE WHEN HYKTO_YM IS NOT NULL THEN TO_CHAR(ADD_MONTHS(SUBSTR(HYKTO_YM, 1, 4) || \'/\' || SUBSTR(HYKTO_YM, 5, 2) || \'/01\', 1), \'YYYYMM\') END AS HYKTO_NXT_YM, 2FROM (SELECT MF_SISAKU.*, EGT0000P.EGT0102S(SISKKNR_NO, \'O\') || 01 AS SISKKIJUN_YMD FROM MF_SISAKU) MF_SISAKU_MAIN LEFT OUTER JOIN VW_TKUISK ON MF_SISAKU_MAIN.HYKHOJIN_CD = VW_TKUISK.TKUISK_CD AND SISKKIJUN_YMD BETWEEN VW_TKUISK.YUKOFROM_YMD AND VW_TKUISK.YUKOTO_YMD 3LEFT OUTER JOIN MF_SISKHINGRP ON MF_SISAKU_MAIN.SISKKNR_NO = MF_SISKHINGRP.SISKKNR_NO AND SISK_SEQ = 1 AND HYKHSY_KBN = 1 AND HYOJI_SEQ = 1 4LEFT OUTER JOIN MF_HINGRP ON MF_HINGRP.HINGRP_CD = MF_SISKHINGRP.HINGRP_CD AND SISKKIJUN_YMD BETWEEN MF_HINGRP.YUKOFROM_YMD AND MF_HINGRP.YUKOTO_YMD 5LEFT OUTER JOIN VW_NEWSSK ON MF_SISAKU_MAIN.TNTBSY_CD = VW_NEWSSK.SSK_CD AND SISKKIJUN_YMD BETWEEN VW_NEWSSK.YUKOFROM_YMD AND VW_NEWSSK.YUKOTO_YMD 6LEFT OUTER JOIN VW_KZNKHN ON MF_SISAKU_MAIN.TNT_CD = VW_KZNKHN.KZN_CD AND SISKKIJUN_YMD BETWEEN VW_KZNKHN.YUKOFROM_YMD AND VW_KZNKHN.YUKOTO_YMD 7LEFT OUTER JOIN MF_CATEGORY CATE_JTI ON MF_SISAKU_MAIN.SISKJTI_KBN = CATE_JTI.KBN AND CATE_JTI.CTGRSBT_KBN = \'SISKJTI\' 8LEFT OUTER JOIN MF_CATEGORY CATE_SBT ON MF_SISAKU_MAIN.SISKSBT_CD = CATE_SBT.KBN AND CATE_SBT.CTGRSBT_KBN = \'SISKSBT\' 9LEFT OUTER JOIN MF_CATEGORY SIMU_SBT ON MF_SISAKU_MAIN.SIMU_STAT = SIMU_SBT.KBN AND SIMU_SBT.CTGRSBT_KBN = \'SIMUST\' 10LEFT OUTER JOIN MF_CATEGORY MKH_SBT ON MF_SISAKU_MAIN.MKH_STAT = MKH_SBT.KBN AND MKH_SBT.CTGRSBT_KBN = \'MKHOST\' 11LEFT OUTER JOIN VW_PAYMENT PAY ON MF_SISAKU_MAIN.PAYMENT_CD = PAY.PAYMENT_CD ;

追加するSQL

SQL

1select HYSCAL_KBN,HYKSIHYO_KBN 2CASE HSYCAL_KBN 3 WHEN '1' THEN 4 CASE HYKSIHYO_KBN 5 WHEN '01' THEN 'A' 6 WHEN '02' THEN 'A' 7 WHEN '03' THEN 'B' 8 WHEN '04' THEN 'B' 9 WHEN '05' THEN 'B' 10 WHEN '06' THEN 'B' 11 END 12 WHEN '2' THEN 13 CASE HYKSIHYO_KBN 14 WHEN '01' THEN 'A' 15 WHEN '02' THEN 'A' 16 WHEN '03' THEN 'B' 17 WHEN '04' THEN 'B' 18 WHEN '05' THEN 'B' 19 WHEN '06' THEN 'B' 20 END 21 WHEN '3' THEN 'C' 22 23 ELSE NULL 24 END AS KUBUN 25 26from HOGE;

追加後のSQL

SQL

1SELECT MF_SISAKU_MAIN.SISKKNR_NO, MF_SISAKU_MAIN.TNT_CD, MF_SISAKU_MAIN.PAYMENT_CD, MF_SISAKU_MAIN.PAYMENT_TYPE,MF_SISAKU_MAIN.HSYCAL_KBN, MF_SISAKU_MAIN.HYKSIHYO_KBN,MF_SISAKU_MAIN.TNTBSY_CD, MF_SISAKU_MAIN.KOSIN_TIM, MF_SISAKU_MAIN.SISKDAT_SBT, MF_SISAKU_MAIN.PRIVATE_FLG, MF_SISAKU_MAIN.PAYAPLY_STAT,MF_SISAKU_MAIN.SISKAPLY_STAT,MF_SISAKU_MAIN.SIMU_STAT, HYKFROM_YM, HYKTO_YM, TKUISK_KNM, SISK_ID, SISK_KNM, HINGRP_KNM, HSY_KIN, PLN_KIN, JGN_KIN, SSKRYK_KNM, KNZSMEI_SEI_KNM, KNZSMEI_MEI_KNM,SISKJTI_KBN, SISKPTN_KBN, SISKOPE_STAT, TRKSAPLY_STAT, CATE_JTI.KNM AS CATE_JTI_KNM, CATE_SBT.KNM AS CATE_SBT_KNM, PAY.PAYMENT_KNM,SIMU_SBT.KNM AS SIMU_SBT_KNM,MKH_SBT.KNM AS MKH_SBT_KNM,CASE WHEN HYKTO_YM IS NOT NULL THEN TO_CHAR(ADD_MONTHS(SUBSTR(HYKTO_YM, 1, 4) || \'/\' || SUBSTR(HYKTO_YM, 5, 2) || \'/01\', 1), \'YYYYMM\') END AS HYKTO_NXT_YM, CASE HSYCAL_KBN WHEN 1 THEN CASE HYKSIHYO_KBN WHEN 01 THEN A WHEN 02 THEN A WHEN 03 THEN B WHEN 04 THEN B WHEN 05 THEN B WHEN 06 THEN B END WHEN 2 THEN CASE HYKSIHYO_KBN WHEN 01 THEN A WHEN 02 THEN A WHEN 03 THEN B WHEN 04 THEN B WHEN 05 THEN B WHEN 06 THEN B END WHEN 3 THEN C ELSE NULL END AS HOGE 2FROM (SELECT MF_SISAKU.*, EGT0000P.EGT0102S(SISKKNR_NO, \'O\') || 01 AS SISKKIJUN_YMD FROM MF_SISAKU) MF_SISAKU_MAIN LEFT OUTER JOIN VW_TKUISK ON MF_SISAKU_MAIN.HYKHOJIN_CD = VW_TKUISK.TKUISK_CD AND SISKKIJUN_YMD BETWEEN VW_TKUISK.YUKOFROM_YMD AND VW_TKUISK.YUKOTO_YMD 3LEFT OUTER JOIN MF_SISKHINGRP ON MF_SISAKU_MAIN.SISKKNR_NO = MF_SISKHINGRP.SISKKNR_NO AND SISK_SEQ = 1 AND HYKHSY_KBN = 1 AND HYOJI_SEQ = 1 4LEFT OUTER JOIN MF_HINGRP ON MF_HINGRP.HINGRP_CD = MF_SISKHINGRP.HINGRP_CD AND SISKKIJUN_YMD BETWEEN MF_HINGRP.YUKOFROM_YMD AND MF_HINGRP.YUKOTO_YMD 5LEFT OUTER JOIN VW_NEWSSK ON MF_SISAKU_MAIN.TNTBSY_CD = VW_NEWSSK.SSK_CD AND SISKKIJUN_YMD BETWEEN VW_NEWSSK.YUKOFROM_YMD AND VW_NEWSSK.YUKOTO_YMD 6LEFT OUTER JOIN VW_KZNKHN ON MF_SISAKU_MAIN.TNT_CD = VW_KZNKHN.KZN_CD AND SISKKIJUN_YMD BETWEEN VW_KZNKHN.YUKOFROM_YMD AND VW_KZNKHN.YUKOTO_YMD 7LEFT OUTER JOIN MF_CATEGORY CATE_JTI ON MF_SISAKU_MAIN.SISKJTI_KBN = CATE_JTI.KBN AND CATE_JTI.CTGRSBT_KBN = \'SISKJTI\' 8LEFT OUTER JOIN MF_CATEGORY CATE_SBT ON MF_SISAKU_MAIN.SISKSBT_CD = CATE_SBT.KBN AND CATE_SBT.CTGRSBT_KBN = \'SISKSBT\' 9LEFT OUTER JOIN MF_CATEGORY SIMU_SBT ON MF_SISAKU_MAIN.SIMU_STAT = SIMU_SBT.KBN AND SIMU_SBT.CTGRSBT_KBN = \'SIMUST\' 10LEFT OUTER JOIN MF_CATEGORY MKH_SBT ON MF_SISAKU_MAIN.MKH_STAT = MKH_SBT.KBN AND MKH_SBT.CTGRSBT_KBN = \'MKHOST\' 11LEFT OUTER JOIN VW_PAYMENT PAY ON MF_SISAKU_MAIN.PAYMENT_CD = PAY.PAYMENT_CD ;

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

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

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

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

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

m.ts10806

2018/07/09 05:14

プレビュー見ながら質問を編集してください。 >「\」が「¥」に置き換えられ また「元々実装されているSQL」がなく「追加するSQL」だけでは分かりません。実際に実行しようとしているSQL全文を提示してください(あとできればテーブル定義も)
ta_ku0419

2018/07/09 05:32

テーブル定義はテーブル・ビューの量が多いため割愛しました。
ta_ku0419

2018/07/09 05:43 編集

エスケープシーケンスについては理解していますが、’などエスケープシーケンスが必要な文字は追加するSQLには含まれておらず、関係ないように思うのですが...?追加した際に、既存の部分に影響を与えるということはあるのでしょうか。
m.ts10806

2018/07/09 05:46

\'/\'   \'YYYYMM\'  などなど、沢山入れようとしているように思いますが、どのような意図でこれらは入っているのでしょうか。
ta_ku0419

2018/07/09 05:48

TO_CHAR()で日付型をYYYYMMの文字型に変更しようとしています。
m.ts10806

2018/07/09 05:52

ちなみにバックスラッシュが円マークに置き換えられ・・は実際は置き換えられたわけではありません。同じものです(環境によって表示が変わります)。エスケープしようとして\を入れたわけではないのでしょうか?何のための\なのでしょうか。いずれにしても今回のSQLには不要な対応かと。
guest

回答2

0

ベストアンサー

動作しているSQLを見ると、文字列の場合は \'文字列\'と記述するのがルールのようです。
一方新たに組み込まれたSQLを見ると、追加するSQLでは文字列なのに、そのルールが適用されていません。

何を持ってそのようなルールなのかは分かりませんが、質問の内容から読み取れるのはそういった事です。

投稿2018/07/09 08:01

sazi

総合スコア25138

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

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

ta_ku0419

2018/07/10 00:32

saziさんのおっしゃる通り\'文字列\'でやると上手く動作しました。 ありがとうございました。
guest

0

お使いのOracleのバージョンは?
OSqlEditはOracle10gくらいまでの対応だったかと。
CodeIgniterのバージョンを変えたらどうなりますか?

SQLの途中に空白行は入れないで試しては?

追記
最初のSELECT文
... END AS HYKTO_NXT_YM, -- , が余計ってオチ?
FROM

SELECT文は現象が再現できる最小限の内容に絞っては?その絞った中に載っている CREATE TABLE文の提示は必要です。
あと、SQLが見にく過ぎます。もう少し見易さは考えては?

投稿2018/07/09 05:13

編集2018/07/09 07:35
Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問