在上一篇中我們已經介紹過DEFINE COLUMN、DEFINE FIELD兩種DEFINE
本篇要介紹接下來的三種DEFINE,分別是
DEFINE REPORT
DEFINE TABLE DB
DEFINE VIEW
DEFINE REPORT
我們使用DEFINE REPORT來:
建立一個新報告
修正已存在的報告
語法
DEFINE REPORT view_name
view_name 允許你存取一個已經存在的view,或創造一個有特定名稱的新view。
如果你的view名稱有兩個單字,那你要在這兩個單字之間插入一個底線( _ )
DEFINE TABLE DB
我們使用DEFINE TABLE DB來存取放在伺服器中的表單。你可能會因為平台的不同而使用不同方式做存取。
如果平台是Windows,那麼你可以無限存取表單,不過我們建議最好不要超過五個。存取時間會隨你存取表單數目的增加而增加。
如果平台是z/OS,那麼你只能存取五個以上的表單。
語法
DEFINE TABLE DB SERVER "z/OS_server_profile"|SOURCE database_profile SCHEMA "database_schema"|subsystem DBTABLE "database_table_name" FIELDS "field_names"|"ALL"
SERVER "server_profile" 定義ACL使用何種伺服器的描述,以存取放置在z/OS系統中的資料。伺服器的描述會包含使用者資訊、連結資訊,像是IP與Port。記得要把伺服器描述用 " " 符號包起來。
SOURCE database_profile 定義ACL使用何種資料庫描述,以存取放置在大部分電腦中的資料。資料庫描述包含伺服器描述、資料庫型態、使用者資訊、連結資訊,像是IP與Port。
PASSWORD n 當伺服器或資料庫描述中不包含密碼時,我們就要用PASSWORD n來設定我們的密碼。我們把第一個密碼放在關鍵字SERVER後面,第二個放在SOURCE後面。你用第一個密碼登入伺服器,第二個則讓你登入資料庫。
如果你不希望script在你輸入密碼之前停下來,那你可以自己設定密碼。不過如果自己設定密碼,那該密碼會出現在你的script中。
FORMAT format_name 定義table layout之後的ACL表單名稱,我們會使用該表單作為格式。
SCHEMA "database_schema"|subsystem 定義由你的資料庫管理者所提供之schema或子系統。我們要把schema的名稱用 " " 包起來,子系統名稱則可包可不包。
DBTABLE "database_table_name" 定義你想要存取的資料庫表單。我們要把它用 " " 包起來,像是DBTABLE "DSN1310"這樣。為了使用來自於一個以上表單的欄位,我們要按照欄位的來源順序替表單命名。舉例來說,DBTABLE "DSN1310" FIELDS "Field_A Field_B Field_C" "DSN2516" FIELDS "Field_L Field_M Field_N"。
定義你想要從特定表單中包含進來的欄位。我們可以輸入特定表單的名稱來包含特定欄位,也可以輸入ALL以包含所有欄位。我們按照表單的名稱來排列欄位名稱,並把這一系列的欄位用 " " 包起來,例如"Field_1 Field_2 Field_3"這樣。
TITLED "ACL_table_name" 定義新表單的名稱,我們要把它用 " " 包起來,像是"Claims_paid"這樣。如果你沒替表單命名,ACL就會使用資料庫的表單名稱。當你一次存取一個以上的表單時,ACL就會使用使用第一個表單的名稱。
定義此表單是否為主表(primary table)或次表(secondary),ACL的預設值是PRIMARY
ORDER "field_names" 定義column中的時間排列方式是遞增或遞減。不過排序會增加作業時間,所以建議只有在順序很重要時在使用ORDER這個參數。另外要把它用 " " 包起來。
限制資料要符合這個條件。它使用SQL的語法。當你將join超過一個表單時,ACL會在WHERE子句中呈現join的條件。例如 "Table_1.First_name = Table_2.First_name"。另外要把WHERE子句用 " " 包起來。
語法範例
To access DB2 data from a z/OS server
DEFINE TABLE DB SERVER "zOS_7000" PASSWORD 10 FORMAT "Month_end" SCHEMA DSN1 DBTABLE "DSN8610.DEPT" FIELDS "Administrator Department_name Department_number Location" DBTABLE "DSN8320.SALARY" FIELDS "Employee Department_name Department_number Amount" TITLED "Department_summary" WHERE "DEPT.Department_number = SALARY.Department_number"
To access Oracle data from an AIX server
DEFINE TABLE DB SOURCE Oracle3 PASSWORD 3 PASSWORD 2 FORMAT Credit_cards SCHEMA "Term" DBTABLE "AP_March" FIELDS "Code Vendor" DBTABLE "CC_codes" FIELDS "Vendor Number Location Invoice_date" TITLED "AP_codes_March_2004" ORDER "CC_codes.Vendor" WHERE "AP_March.Vendor = CC_codes.Vendor"
DEFINE VIEW
我們使用DEFINE VIEW來建立一個view。你可以在命令欄(command line)或腳本(script)裡執行DEFINE VIEW。當你建立有條件的運算欄位時,因為它需要許多行語法,所以這時候你只能使用script。
如果我們的view跟別的view取到相同名稱,而且你還在命令欄中執行命令,那麼ACL就會問你是不是想要覆蓋現存的view。不過你可以在script中使用DEFINE VIEW …OK來避免ACL的警告。
語法
DEFINE VIEW view_name OK
view_name 是我們所要創造或是覆蓋的view的名稱。
HEADER "header_text" 表示報告的標題。
FOOTER "footer_text" 表示報告的標尾。
定義的標題與標尾是置中,如果你想要將它們放到左邊,可以在header text開始時使用這個符號:<
ALL 是用來確定所有已開表單中的欄位都自動地加入view中。
SUPPRESS 會讓空白的部分被呈現。報告會自動地將資料上移,然後將空白取代掉。當你的報告是multiline view的時候,就可以選擇要不要使用這個功能。
SUMMARIZED 設定報告的view是全部(totals)或部分(subtotals)。Subtotals是依據view中定義的break fields所產生的。如果這個功能未被選擇使用,ACL就會產生包含所有的細節列。預設值為:包含所有明細列(Include detail lines)
TO "report_file_name" HTML 允許使用者替從view中產生的報告訂定檔案名稱與型態。HTML定義一個HTML檔案作為output。如果你沒有特別指定,那預設的output會是ASCII文字檔。
IF test and WHILE test 是用來作條件判斷的範圍參數。
RLINES n 替view和report中的明細紀錄列訂定空間。預設中,列的空間是單一的(line spacing is single)。
範例
我們要設計一個新的view,名稱是 Test_View,它沒有包含任何新欄位,然後它是從AR表單中來的,承接AR表單裡所有的欄位:
OPEN AR
DEFINE VIEW Test_View HEADER "AR Report" ALL OK
| 2 |
| |
|