0

私は、定期的なヘッダーにビジネスの住所が含まれ、そのビジネスに関連するいくつかの行が続き、その後に次のビジネスの住所が続く SQLPlus レポートを作成しています。

BOB'S GUITARS 
123 SESAME STREET 
NEW YORK, NY 10001

customer name   last purchase date   last purchase amount
-------------   ------------------   --------------------

DAVE'S CIGARS 
456 MOCKINGBIRD LANE 
WASHINGTON, DC 12345

customer name   last purchase date   last purchase amount
-------------   ------------------   --------------------

問題はこれです:

これらの企業の中には、複数行の住所を持つものもあれば、持たないものもあります。

基本的なケースは次のようなもので処理できます TTITLE CENTER BUSINESSNAME SKIP 1 CENTER ADDR1 SKIP 1 CENTER CITY

(「CITY」は、都市、州、および郵便番号を含む変数です)

しかし、ADDR1 と CITY の間に空白行を入れる危険を冒さずに、「ADDR2 が null でない場合は 2 番目の住所行を追加する」方法を理解するのに苦労しています。

というか、いらない

BOB'S GUITARS
123 SESAME STREET

NEW YORK, NY 10001

サポートするために

DAVE'S CIGARS
456 MOCKINGBIRD LANE
SUITE 101
WASHINGTON, DC 12345

編集/追加: nvl とデコードの組み合わせの提案は正しい最初のステップでしたが、問題の 2 行の「行」がレポートの LINEWIDTH を超えているため、LINEWIDTH 文字に切り捨てられるという問題に遭遇しました。 . その行を生成するために使用しているコードは次のとおりです。両方の線を中央に配置する必要があることに注意してください。

SELECT RPAD(' ', (79 - length(trim(address)))/2) 
  || trim(address) 
  || decode(nvl(trim(address_2), '='), '=', '', 
    CHR(10) 
    || RPAD(' ', (79 - length(trim(address_2)))/2, '-') 
    || trim(address_2) || ' ') ADDR1 from business
4

2 に答える 2

1

addr_2が存在する場合は、addr_1またはaddr1+addr_2のいずれかを含むアドレス変数を定義できるとします。これは、この変数の選択になります。

addr1を選択|| 表からdecode(nvl(addr_2、'=')、'='、''、CHR(10)|| addr_2)

CHR(10)は改行です!!


私の提案を完成させようとしています。(パディングを手動で処理する必要はありません)

列を定義し、選択変数と一時変数でエイリアスを使用する必要があります

COLUMN NEW_ADDR new_value N_ADDR noprint
TTITLE CENTER BUSINESSNAME SKIP 1 CENTER N_ADDR SKIP 1 CENTER CITY
-- I suppose you have some break on businessname command here 
BREAK ON BUSINESSNAME ON NEW_ADDR .... 
SELECT ...., ADDRESS || DECODE (NVL(ADDRESS_2,'='),'=','',CHR(10)||ADDRESS_2) AS NEW_ADDR  FROM BUSINESS

また、http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch6.htmを参照することをお勧めします

于 2012-05-16T20:32:21.560 に答える
0

ドキュメントと分析を検討した結果、これは実行できないようです。(非技術的な)解決策は、SQL*Plusが実際に生成できるフォーマットを受け入れるようにビジネスオーナーに圧力をかけることでした。彼らはその解決策に満足しています。

于 2012-05-30T18:48:08.710 に答える