天天看點

sql腳本中出現SQL> SQL> 以及 列名重命名不顯示問題

 QL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>   2    3    4    5    6    7    8    9   10   11  20120131 消費                  1583   48627.56

20120131 消費撤銷                33      74.32

20120131 卡啟動記錄             614          0

出現SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>   2    3    4    

隻需要在sql腳本開始的時候添加 sqlplus -s user/pass >>!

data

!

可解決

sqlplus 中執行結果

時間     交易類型            交易數   交易金額

-------- --------------- ---------- ----------

20120131 消費                  1583   48627.56

sql指令如下

SQL> select  t.inst_date as "時間",cast(d.dict_name as char(15)) as "交易類型", count(1) as "交易數", sum(t.amt_trans/100) as "交易金額"

  2    from tbl_txn_his t , tb_ent_dict_info d 

  3   where t.inst_date >= 20120131

  4     and t.inst_date <= 20120131

  5     and t.txn_num in (1105, 3105, 7000, 7010)

  6     and t.revsal_flag = '0'

  7     and t.cancel_flag = '0'

  8     and t.resp_code ='00'

  9     and t.txn_num = d.dict_id 

 10     and d.dict_type = 999

 11     group by d.dict_name   , t.inst_date 

 12  ;

在不顯示列名,目前的辦法是這樣

select '時間    交易類型            交易數量        金額 ' from dual;

union all;

select t.inst_date as "時間",cast(d.dict_name as char(15)) as "交易類型", count(1) as "交易數", sum(t.amt_trans/100) as "交易金額"

  from tbl_txn_his t , tb_ent_dict_info d 

 where t.inst_date >= 20120131

   and t.inst_date <= 20120131

   and t.txn_num in (1105, 3105, 7000, 7010)

   and t.revsal_flag = '0'

   and t.cancel_flag = '0'

   and t.resp_code ='00'

   and t.txn_num = d.dict_id 

   and d.dict_type = 999

   group by d.dict_name   , t.inst_date;

ps:附上Oracle SQL*PLUS指令應用 設定顯示列格式的相關指令

設定列格式的相關指令

 1. 改變列的顯示長度 

COLUMN column_name FOR[MAT] format 

備注:  

  注意該指令将保持一直生效直至輸入了一個新的格式值或者退出了SQL*PLUS, 其中字段類型可以為Char, Varchar2, varchar。

如果SQL*PLUS的WARP變量的值被設定為"開"(預設值), 那麼字段的内容将會在format指令規定的長度處折行, 否則的話超過規定長度的後續字元将會被截取。

  如果你有多個相同顯示屬性的列需要設定,那麼使用column 字段名 like 你想要複制顯示屬性的字段heading 字段名。注意如果不加上後面heading 字段名那麼複制的時候連字段名都會複制過去,顯然不适合一般要求。

   2. 格式化NUMBER類型列的顯示 

SQL> COLUMN SAL FORMAT $99,990 

3. 顯示列值時,如果列值為NULL值,用text值代替NULL值 

COMM NUL[L] text 

SQL>COL COMM NUL[L] text 

4. 設定一個列的回繞方式 

COLUMN WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] 

備注:此指令常和format合用,當列值過長時可以使用該指令格式話輸出, wrapped根據字元長度控制, word_wrapped根據單詞控制, truncated則直接截取等長字元。

  5. 清空目前所有列的設定,恢複成預設格式

  CLEAR COLUMNS

下面我們來看一下這些指令的綜合應用:

SQL> desc testtable;

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER

 NAME                                               VARCHAR2(20)

 REMARK                                             VARCHAR2(50)

 SALARY                                             NUMBER

SQL> select * from testtable;

        ID NAME

---------- ----------------------------------------

REMARK

--------------------------------------------------------------------------------

    SALARY

----------

         1 paul

     99999

現在我們要對這個輸出進行修改,包括:

①分别設定輸出列的長度為2、10、6、8

②分别設定輸出列的列名居中

③格式化Salary列的值為$999,999

④将Remark列的空值替換為字元串User description

⑤設定Remark列的回繞方式為按單詞回繞

下面我們來看看這個SQL*PLUS指令應該如何寫:

SQL> column ID justify center

SQL> column Name justify center format a10

SQL> column Remark justify center format a6 NULL 'User description' word_wrapped

SQL> column salary justify right format $999,999

    ID        NAME    REMARK    SALARY

---------- ---------- ------ ---------

         1 paul       User     $99,999

                      descri

                      ption

看看其中的SQL語句:

Column Remark justify center format a6 NULL 'User description' word_wrapped。

該句設定了:列名居中顯示、列的長度為6個字元、空值用'User description'代替、按單詞回繞(是以是在User處折行,而不是在User d出折行,雖然列的長度可以為6)

設定頁面及行格式的相關指令

1.設定一行可以容納的字元數 

SQL> SET LIN[ESIZE] {80|n} 

如果一行的輸出内容大于設定的一行可容納的字元數,則折行顯示。 

2.設定一頁有多少行數 

SQL> SET PAGES[IZE] {24|n} 

如果設為0,則所有的輸出内容為一頁并且不顯示列标題 

   3.設定頁與頁之間的分隔 

SQL> SET NEWP[AGE] {1|n|NONE} 

當set newpage 0 時,會在每頁的開頭有一個小的黑方框。 

當set newpage n 時,會在頁和頁之間隔着n個空行。 

當set newpage none 時,會在頁和頁之間沒有任何間隔。 

備注:以上三個指令經常合用, 首先設定每行顯示的最大長度, 再設定每頁有多少行, 最後設定頁間距. 如果要擷取較好格式的話可以配合Column format指令格式化每個字段的長度. 

下面我們來實地檢視一下上述指令在結果輸出中的應用

        ID NAME       REMARK

---------- ---------- --------------------------------------------------

REG_DATE       SALARY

---------- ----------

         1 paul lin

07-6月 -08       5500

         2 bob lin    common user

06-6月 -08       6500

SQL> 

下面我們要做的就是:

①調整頁面最大顯示長度為200

②設定每頁隻顯示一條記錄

③每頁之間間隔兩個空

SQL> set linesize 200 pagesize 1 newpage 2;

SQL> /

         1 paul lin                                                      07-6月 -08       5500

         2 bob lin    common user                                        06-6月 -08       6500

可以看到頁面的輸出并不讓人滿意(标題和虛線都沒有了),現在我們使用一種令人比較滿意的設定:

SQL> set linesize 200 pagesize 999 newpage;

        ID NAME       REMARK                                             REG_DATE       SALARY

---------- ---------- -------------------------------------------------- ---------- ----------

         1 paul lin                                                      07-6月 -08            5500

         2 bob lin    common user                                 06-6月 -08            6500

實際上該指令的最後設定newpage會在每頁的前面加上一個黑色的小方框(在這裡不能顯示),以提示這是新一頁的開始,假如你不想進行任何的提示那麼隻要設定newpage為none就可以了(你所看到的輸出和現在的一模一樣)。

至于linesize的設定則要考慮螢幕和列印機的大小了。

     本文轉自 珏石頭 51CTO部落格,原文連結:http://blog.51cto.com/gavinshaw/771760,如需轉載請自行聯系原作者