java報表工具FineReport的SQL編輯框的文法簡介

來源:互聯網
上載者:User

標籤:

感謝大家捧場,這裡繼續分享關於SQL編輯框的一些文法心得總結,因為資料集定義的面板,也是FineReport報表中最常用的模組之一。

1.我理解的執行過程。

這裡其實是產生一個字串,FineReport將這個字串通過設定的資料連線傳遞到報表中執行。在這個過程中報表應該是先把報表規則的東西,替換成大家都認得的字串後,對應的資料庫執行完,會反饋值,有可能返回報錯資訊,也有可能返回資料集。這個報錯資訊應該是對應的資料庫給的。所以說同樣的sql語句,不同的資料庫用不同的sql文法來執行有可能是不同的結果。比如select ‘sdf‘在access和sqlserver正常顯示,在oracle就拋錯。用select version()或者show status或者show tables能在mysql的資料集定義裡正常執行,其他則不行。

sql中的and和or要和公式區別開,有人可能在公式裡面把&&用成and。還有公式裡面的或||在oracle中是字串的串連符。

 

2.sql中調用公式

報表通過公式和參數實現與sql語句的互動。

公式放在架構${}中。於是${"select* from t1"}其實就等價於select *from t1。

資料集中用公式的痛點在於拼接起來比較繁瑣。

我想很多人接觸到的第一個例子應該是協助文檔上參數為空白返回全部的sql語句:SELECT *FROM 訂單 where 1=1${if(len(area) == 0,"","and 貨主地區 = ‘" + area + "‘")} ${if(len(province) ==0,"","and 貨主省份 = ‘" + province + "‘")}

下面舉個調用FR中format的例子:

select${"‘"+format(p1,"yyyy-MM-dd")+"‘"} from aa

如果漏掉format函數前後的單引號,就會得到錯誤的結果。其實有的時候可以通過一些方法簡化處理的,比如再聲明一個變數p2,引用這個變數的定義是format(p1,"yyyy-MM-dd"),這時候上面的sql就變成了select ‘${p2}‘ from aa 【當然如果沒有加引號的話那p2就被解析為一個欄位名了,這是動態欄位的實現方法了】

對於預存程序,資料集定義這地方其實是支援call和exec的調用方法的。

 

3.sql中調用sql函數

前面說到,sql語句其實是字串。其實是可以從資料庫調用字串作為一個sql語句進行操作的。這個要用到sql函數了,說例子:

=sql("FRDemo",sql("FRDemo","selecttesttext from test where id=2",1,1),1,1)

test這個表裡面的第二條資料的testtext欄位就是字串 select top 1 地區 from 銷量

可以把這個字串用在sql公式中作為sql語句執行

資料集定義那邊這麼寫是可以的 ${sql("FRDemo","select testtext from test where id =2",1,1)}

java報表工具FineReport的SQL編輯框的文法簡介

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.