状況
SAPでCDS-ViewをEclipseを使用して開発しています。
開発したいものは、下記2つのテーブル(ユーザリスト、人口管理テーブル)を結合したZUSERINFOVIEWのようなCDS-Viewです。
ZUSERLIST(ユーザリスト)
USERNAME | ADDRESS | PHONENO | GENDER |
---|---|---|---|
ユーザA | 横浜市 | 0123-456-789 | 男 |
ZPOPULATION(人口管理テーブル)
ADDRESS | POPULATION |
---|---|
神奈川県横浜市 | 3,720,000 |
ZUSERINFOVIEW(CDS-View)
USERNAME | ADDRESS | PHONENO | GENDER | POPULATION |
---|---|---|---|---|
ユーザA | 神奈川県横浜市 | 0123-456-789 | 男 | 3,720,000 |
前提条件
- ZUSERLIST(ユーザリストテーブル)の項目「住所」の値は、必ずZPOPULATION(人口管理テーブル)の項目「住所」の後方一致をする。
試してみたこと
後方一致を結合条件にSQLを書けば良いと思ったので、下記のように実装をしてみました。
SQL
1define view ZUSERINFOVIEW as select from ZUSERLIST 2 inner join ZPOPULATION on ZUSERLIST.ADDRESS LIKE CONCAT(ZPOPULATION.ADDRESS,'%') { 3 key ZUSERLIST.USERNAME, 4 ZPOPULATION.ADDRESS, 5 ZUSERLIST.PHONE, 6 ZUSERLIST.GENDER, 7 ZPOPULATION.POPULATION, 8} 9
これで有効化をしてみたところ、
Comparison value of LIKE condition must be a character-type literal
とエラーになってしまいました。
LIKEのあとは文字型リテラルではないといけないとのことですので、
SQL
1define view ZUSERINFOVIEW as select from ZUSERLIST 2 inner join ZPOPULATION on ZUSERLIST.ADDRESS LIKE CAST(CONCAT(ZPOPULATION.ADDRESS,'%') as abap.char(12) { 3 key ZUSERLIST.USERNAME, 4 ZPOPULATION.ADDRESS, 5 ZUSERLIST.PHONE, 6 ZUSERLIST.GENDER, 7 ZPOPULATION.POPULATION, 8} 9
でいけるかなと思ったのですがダメでした。
※CONCATおよびCAST関数は有効であることは確認済みです。
周りにCDS-Viewに詳しいメンバーもおらず困っています。
どなたか詳しい方、ご教示いただけないでしょうか。
あなたの回答
tips
プレビュー