Oracle Developer 6i 基礎應用,含遍歷BLOCK
轉自
下面是OMF021 分廠延貨單的CODE,在單頭審核時,自動給單身的單筆次數賦值.
declare
lc number;
result number:=0;
dc number:=-1;
cursor cur is
select line_id
from gobo_yhd_lines
where header_id=:gobo_yhd_headers_v.header_id;
cursor cur0(p_org_id number,p_order_number number) is
select max(yh_ver) yhnum
from gobo_yhd_headers
where org_id=p_org_id
and order_number=p_order_number
and open_flag='Y'
and LAST_UPDATE_DATE0 then
bell;
set_alert_property('jj',ALERT_MESSAGE_TEXT,'OH,當前廠當前訂單號此延貨單前還有'||LC||'筆沒審核,請依順序逐筆審核.');
result:=show_alert('jj');
:gobo_yhd_headers_v.Open_flag:='N' ;
RAISE Form_Trigger_Failure;
end if;
select count(*) into lc
from gobo_yhd_headers
where org_id=:gobo_yhd_headers_v.org_id
and ou_id=:gobo_yhd_headers_v.ou_id
and order_number=:gobo_yhd_headers_v.order_number
and yhd_no=:gobo_yhd_headers_v.yhd_no
and nvl(open_flag,'N')='N' ;
if nvl(lc,0) = 0 then
bell;
set_alert_property('jj',ALERT_MESSAGE_TEXT,'此延貨單早前已審核過.');
result:=show_alert('jj');
:gobo_yhd_headers_v.Open_flag:='Y' ;
RAISE Form_Trigger_Failure;
end if;
--BEGIN
if :gobo_yhd_headers_v.open_flag='Y' then
dc:=-1;
for rec in cur loop
begin
dc:=0;
select count(*) into dc
from gobo_yhd_line_details d
where d.line_id=rec.line_id
and rownum<2 if then raise end for in loop end exception when others then raise end if dc="-1" dc="and" then raise end end loop for in loop end exit when end exception when others then>[@more@]以下是轉過來的全文.
Oracle Developer 6i 基礎應用
材料庫存處理案例講解:
1.建表
2.Form/後臺過程
3.Report
1. 建表
材料名稱表
材料庫存賬目表
入庫頭表
入庫明細表
出庫頭表
出庫明細表
基本程式碼維護表
建表要素:
(唯一鍵)唯一可檢索性,一個欄位或多個欄位組合;
歷史追溯性:建立建檔人、建檔日期等,供歷史追溯用;
合理運用主從表;
建Form
材料品名資訊維護Form
材料庫存賬目Form
入庫Form
出庫Form
基本程式碼維護Form
材料名稱Form製作
步驟:
用嚮導建立Data Block及Canvas、Windows;
介面處理知識點:
視窗標題顯示:修改Window名字;
系統選單及工具欄:MENU-MODULE:DEFAULT&SMARTBAR
視窗最大化:WHEN-NEW-FORM-INSTANCE:
Set_Window_Property(FORMS_MDI_WINDOW, Window_State, Maximize);
set_window_property('材料名稱資訊表',Window_State, Maximize);
Data block與cavas的對應設定
當前記錄行加亮顏色設定:Current Record Visual Attribute Group
格式設定:Fomat Mask:Date(: yyyy-mm-dd) Number(fm999,999.00)
初始值設定:initial Value:日期 $$date$$
不可修改鎖定:Enable/Update Allowed(False)
許可權限制查詢:Where Clause
禁止複製記錄:KEY-DUPREC
編譯:直接執行即生成或Ctl-T
小結:涉及內容含Data Block、Canvas、Windows、Trigers,及一些常用的Data Block和Items的屬性設定方法(Property Palette)
材料庫存賬目Form製作
步驟:
用嚮導建立Data Block及Canvas、Windows;
介面處理知識點:
依上一個Form做常用處理(含數字右對齊、格式等);
增加非基表專案(品名、規格、單位);
材料品名等資訊顯示:
用post-change實現顯示品名等項,舊版本存在弊端,管控時會導致查詢停止;
建立一個取品名的通用過程(program unit),對新增及查詢狀態做分開處理,用mtl_no的valid事件和block的post_change事件呼叫取品名過程;
PROCEDURE get_mtl_name(p_status Varchar2,p_mtl_no Varchar2,p_mtl_name out Varchar2 ,p_mtl_spec out Varchar2,p_mtl_unit out Varchar2) IS
Begin
Select mtl_name,mtl_spec,mtl_unit Into p_mtl_name,p_mtl_spec,p_mtl_unit
From mtl_name
Where mtl_no=p_mtl_no;
EXCEPTION
When Others then
p_mtl_name:='';
p_mtl_spec:=null;
p_mtl_unit:=null;
if p_status'QUERY' Then
message('沒有該料號或取品名資料出錯,請核對');
Raise Form_Trigger_Failure;
end if;
END;
材料庫存賬目Form製作
Alert使用:
建立一個Alert,設定確定、取消按鈕,設定其Title;
在指定Data Block增加新增Trigger:Key-delrecProperties中設定各欄位與介面欄位的繫結關係;
Set_Alert_Property('Alert_yn', alert_message_text,'確定刪除?');
If Show_Alert('alert_yn')=Alert_Button1 Then
delete_record;
End if;
彈出選擇框製作及引用
新增Record Groups
Select mtl_no,mtl_name,mtl_spec,mtl_unit from mtl_nameorder by mtl_no
新增Lovs,將其Record Groups屬性設定成上述Record Group;並在Column Maping Properties中設定各欄位與介面欄位的繫結關係;
在對應item增加Trigger:When-mouse-doubleclick:
DECLARE
b_value BOOLEAN;
BEGIN
b_value := Show_Lov('lov_mtl');
If Not b_value Then
Message('沒有選中值');
End If;
END;
下拉框製作
新增Record Groups
Select mtl_no,mtl_name,mtl_spec,mtl_unit from mtl_nameorder by mtl_no
增加Trigger:When-New-Form-Instance:
Declare
v_group Pls_integer;
Begin
v_group:=Populate_group('RECORD_TYPE');
Populate_list('MTL_ACC.MTL_TYPE','RECORD_TYPE');
End;
材料庫存賬目Form製作
彙總欄位:
Data Block的Query All Records必須設定的Query All Records必須設定成Yes;
顏色可例外設定,不繼承當前記錄顏色;
遍歷Data Block匯出文字:
新增非資料塊Data Block,新增資料匯出按鈕;
新增Trigger:When-Botton-Pressed;
Declare
file_name Varchar2(40):='C:mtl.txt';
out_file Text_io.file_type;
Begin
--Work_p;
out_file:=text_io.fopen(file_name,'W');
Text_io.put(out_file,'料號'||Chr(9)||'品名'||Chr(9)||'規格'||Chr(9)||'單位'||Chr(9)||'庫存'||Chr(10));
GO_BLOCK('MTL_ACC');
FIRST_RECORD;
LOOP
Text_io.put(out_file,:mtl_acc.mtl_no||Chr(9));
…..
Text_io.put(out_file,:mtl_acc.stock_qty||Chr(10));
Exit when :System.Last_Record='TRUE';
next_record;
END LOOP;
Text_io.fclose(out_file);
Message('成功匯出,檔案目錄:'||file_name);
:system.message_level:=0;
Exception
When others then
Text_io.fclose(out_file);
Message('出錯,請檢查檔案'||file_name||'是否處於開啟狀態,如果開啟了請先關閉後再試.');
End;
材料庫存賬目Form製作
Form引數Parameters:
引用基礎程式碼維護Form,設定Form引數,增加Fomr Parameters:p_group_desc
設定指定Data Block的查詢條件以便觀察Parameters傳遞情況
group_desc=Nvl(:parameter. p_group_desc,group_desc)
結合group_desc的Initial Value(:p_group_desc)及Trigger:Pre-Form設定當p_group_desc非空時鎖定許可權設定,為空時:不鎖定隨意設定(授權管理人員)
If :parameter.p_group_desc Is Null Then
Set_Item_Property('mtl_code_info.group_desc',Enabled,Property_True);
Else
Set_Item_Property('mtl_code_info.group_desc',Enabled,Property_False);
End If;
在材料庫存賬目視窗加一個按鈕,When-Botton-Pressed (順便介紹regedit/path)
Declare
p paramlist;
BEGIN
p := CREATE_PARAMETER_LIST('P');
ADD_PARAMETER(p,' p_group_desc ',TEXT_PARAMETER,'料號大類');
CALL_FORM('f_code',HIDE,DO_REPLACE,NO_QUERY_ONLY,p);
DESTROY_PARAMETER_LIST('P');
END;
Botton圖示設定
Iconic:yes
Icon Filename:icon檔名
Tooltip:提示資訊
引用icon相簿路徑設定:regedit/oracle/ui_icon
總結:學習使用讀取外圍表資訊作為非基表顯示項;學習彙總欄位應用、學習提示確認資訊框、選擇輸入窗、下拉框、Form引數、圖示按鈕等使用,涉及Alert,lovs,Record Group等,同時介紹遍歷資料塊匯出文字檔案等常用功能語法.
材料入庫Form製作
步驟:
用嚮導建立主入庫從表;
刪除關聯關係及相關triggers,改塊名為head/detail,介紹手動建relation的方法,注意Prevent Masterless Operations 的使用;
改head.slip_type為下拉框,依前面介紹改window名、視窗最大化、日期/數值格式,初始值、當前記錄另色顯示等;
顯示品名和規格等和材料庫存表類似,故做一個後臺通用取品名過程,不需要每個Form定義
CREATE OR REPLACE PROCEDURE get_mtl_name(
p_status Varchar2,
p_mtl_no Varchar2,
p_mtl_name out Varchar2,
p_mtl_spec out Varchar2,
p_mtl_unit out Varchar2,
p_msg out Varchar2) IS
Begin
Select mtl_name,mtl_spec,mtl_unit Into p_mtl_name,p_mtl_spec,p_mtl_unit From mtl_name
Where mtl_no=p_mtl_no;
EXCEPTION
When Others then
p_mtl_name:=null;
p_mtl_spec:=null;
p_mtl_unit:=null;
If p_status'QUERY' Then
p_msg:='沒有該料號或取品名資料出錯,請核對';
End If;
END;
/
總結:學習應用主從表關聯關係;學習建立/呼叫後臺過程函式。
材料出庫Form製作
步驟:
複製入庫Form作為模板;
更改window名,更改資料塊與後臺表關聯,更改入庫型別等描述字眼為出庫,更改入庫型別Record Group為出庫型別等即完成出庫Form製作;
總結:學習複製方式製作Form.
庫存處理後臺控制程式
CREATE OR REPLACE PROCEDURE MTL_STOCK_P1 (
p_slip_type Varchar2, --單據型別(IN/OUT)
p_op Varchar2, --操作型別(Insert/Delete)
p_mtl_no Varchar2,
p_qty Number) Is
v_type Number;
v_op Number;
v_qty Number;
v_exp01 Exception;
Begin
If Nvl(p_qty,0)=0 Then
Return;
End If;
If p_slip_type='IN' Then --IN (入庫) OUT (出庫)
v_type:=1;
Else
v_type:=-1;
End If;
If p_op='I' Then --I (Insert) D (Delete)
v_op:=1;
Else
v_op:=-1;
End If;
If v_type*v_op=-1 Then --扣庫存,先檢查庫存量是否夠
Select Nvl(Sum(stock_qty),0) Into v_qty From mtl_acc
Where mtl_no=p_mtl_no;
If v_qty
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/92289/viewspace-1046673/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 圖論演算法遍歷基礎圖論演算法
- JavaScript基礎 —— DOM:遍歷 與 範圍JavaScript
- 二叉樹的遍歷及應用二叉樹
- JS 基礎篇(七):JS中的遍歷函式JS函式
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- Python基礎-列表操作(2):列表的遍歷和數字列表Python
- JAVA基礎 練習-13-ArrayList集合學生物件遍歷Java物件
- 【JavaScript實用技巧(一)】迴圈遍歷與跳出迴圈遍歷JavaScript
- python基礎應用Python
- Sentinel基礎應用
- shell基礎應用
- echarts基礎應用Echarts
- Oracle遊標遍歷%rowtype中的記錄Oracle
- 6. Oracle開發和應用——6.1. 基礎知識Oracle
- 「一個wfuzz應用案例」拿到目錄遍歷漏洞後用wfuzz爆破
- js的map遍歷和array遍歷JS
- Linux應用——程序基礎Linux
- Windows應用程式基礎Windows
- Ubuntu Server 基礎應用UbuntuServer
- Oracle 基礎Oracle
- JavaScript中迴圈遍歷JSON響應!JavaScriptJSON
- 線索二叉樹【定義、應用、線索化、遍歷】二叉樹
- Oracle Block Cleanouts 塊清除OracleBloC
- 遍歷 FlowDocument
- jQuery 遍歷jQuery
- Linuxshell遍歷Linux
- Oracle EBS基礎學習:Oracle EBS啟用診斷功能Oracle
- Linux下Nginx基礎應用LinuxNginx
- 應用基礎框架全面解析框架
- nginx的基礎應用(續)Nginx
- 目錄遍歷-基於Pikachu的學習
- Web前端遍歷物件應該如何操作呢?Web前端物件
- 【資料結構&演算法】11-樹基礎&二叉樹遍歷資料結構演算法二叉樹
- ORACLE基於單機PSU應用方案Oracle
- Objective-C基礎之四(深入理解Block)ObjectBloC
- 如何遍歷 HashMap,遍歷HashMap 的 5 種最佳方式HashMap
- jQuery的遍歷結構設計之遍歷同胞jQuery
- jQuery的遍歷結構設計之遍歷祖先jQuery
- 【BLOCK】Oracle 塊管理常用SQLBloCOracleSQL