--獲取系統記錄行數
go_block('T_WARITEMPRT');
last_record;
 row_count:=:system.trigger_record; --system.cursor_record
--execute_trigger('POST-CHANGE');

 --設置鼠標狀態
set_application_property(cursor_style,'BUSY');
 --raise form_trigger_failure;

 --顯示錯誤信息
 exception when others then
display_note(sqlerrm||sqlcode,:global.logon_user);
--decode
 decode(a.freightmode,'0','企業自付','1','供應商付費','2','企業代付','3','供應商代付',null)
 decode(qtyonhand - qtyinit,invtranqty,invtranqty,null)

 --導出路徑
 select * from t_parameter where f_name='LeanERPTempDir';
 select f_c_value from t_parameter where f_name ='WebServer1';

 --合同附件
 select f_c_value from t_parameter where f_name='purorderaccesspath';
 select f_c_value from t_parameter where f_name='purorderaccessurl';

 --設置值列表
SET_ITEM_PROPERTY('top.ORIGINALNO',LOV_NAME,'LOV_MSO');
LIST_VALUES;

 --下拉列表
n:=populate_group('rec_lb');
populate_list('BLK_BUT.APPTYPE','rec_lb');
:bLK_BUT.APPTYPE:='0';

 --調用另一模塊
DECLARE
 pl_id ParamList;
 v_string varchar2(1000);
 v_itemname varchar2(1000);
BEGIN
 pl_id := Get_Parameter_List('calendar');
 IF NOT Id_Null(pl_id) THEN
Destroy_Parameter_List(pl_id);
 END IF;
 pl_id := Create_Parameter_List('calendar');
v_itemname:=:system.current_block||'.'||:system.current_item;
v_string:=name_in(v_itemname);
 Add_Parameter(pl_id, 'p_str',TEXT_PARAMETER,v_string);
Call_Form('input_str',no_hide,no_replace,no_query_only,pl_id);
 copy(:global.str,v_itemname); Erase(:global.str);
END;

 --批量處理
set_application_property(cursor_style,'BUSY');
SYNCHRONIZE;
first_record;
loop
null;
 exit when :system.last_record = 'TRUE';
next_record;
 end loop;
set_application_property(cursor_style,'DEFAULT');
bell;
display_note('SRMP035',:global.logon_user);
 --採購計劃關閉完畢!
 --對話框
 IF display_stop('INV081', :GLOBAL.logon_user) <> alert_button1 THEN
RETURN;
 END IF;

 --取得貨幣名稱
begin
 select currencydesc
 into v_currencydesc
 from t_currency
 where currencycode = c1.splymoneyflag;
 exception when others then v_currencydesc := '人民幣(元)';
end;

 --詢問對話框-1
declare
 return_value number;
begin
 set_alert_property('stop_alert',alert_message_text,'確認送審該合同嗎?');
 return_value := show_alert('stop_alert');
 if return_value != alert_button1 then
return;
 end if;
end;

 --詢問對話框-2
DECLARE
 return_value number;
BEGIN
 return_value := display_stop('mdm011',:global.logon_user);
 IF return_value = ALERT_BUTTON1 THEN
COMMIT_FORM;
 END IF;
END;

 --取下週一
 select trunc(sysdate,'d')+8 from dual;

--message_level
 oldmsg := :System.Message_Level;
 IF reldef = 'FALSE' THEN
Go_Block(detail);
Check_Package_Failure;
 :System.Message_Level := '10';
Execute_Query;
 :System.Message_Level := oldmsg;
ELSE

 --取當前年度、期段號
begin
 select year,period
 into v_year,v_period
 from t_accperiod
 where sysdate >= startdate
 and to_char(sysdate,'yyyy/mm/dd')<=to_char(enddate,'yyyy/mm/dd');
 exception when others then null;
end;

 --設置畫布屬性
vCan2:=FIND_VIEW('CAN_PRTNO2');
SET_VIEW_PROPERTY(vCan2,VISIBLE,property_true);
vCan1:=FIND_VIEW('CAN_PRTNO1');
SET_VIEW_PROPERTY(vCan1,VISIBLE,property_false);

 --設備提示信息
 elsif :top.opsrc = 'X' or :top.opsrc='T' then
 set_item_property('top.tranobj',prompt_text,'客戶代碼');
else
 set_item_property('top.tranobj',prompt_text,'部門代碼');
 end if;

 --設置值列表KEY-LISTVAL
 ELSIF :top.OPSRC='I' THEN --零星出庫
SET_ITEM_PROPERTY('top.ORIGINALNO',LOV_NAME,'LOV_MSI');
LIST_VALUES;
 IF :top.ORIGINALNO IS NOT NULL THEN
PRTNO_MSI;
 END IF;
 END IF;

 --調用值列表show_lov
DECLARE
 a_value_chosen BOOLEAN;
BEGIN
 a_value_chosen := Show_Lov('lov_name');
 IF a_value_chosen THEN
 set_block_property('t_efficiency',default_where,'username = :control.display_name');
go_block('t_efficiency');
execute_query;
 set_block_property('t_efficiency',default_where,'username in (select username from t_hrmuser where department = :global.user_dept)');
 END IF;
END;

 --生成序號
declare
 vlpadnum number;
 maxno varchar2(6);
 cursor cerpcode is select sequence,lpadnum from t_erpcode
 where erpcode='PURAPPNO' and prifix=to_char(sysdate,'yy')||to_char(sysdate,'mm') for update nowait;
begin
 if :t_purapp.appno is null then
 if :SYSTEM.MODE = 'NORMAL' THEN
begin
begin
 for c1 in cerpcode loop
 update t_erpcode set sequence=sequence+1 where erpcode='PURAPPNO' and prifix=to_char(sysdate,'yy')||to_char(sysdate,'mm');
 end loop;
exception
 when others then
display_note('SYS071',:global.logon_user);
 raise form_trigger_failure;
end;
 select sequence,lpadnum into maxno,vlpadnum from t_erpcode where erpcode='PURAPPNO' and prifix=to_char(sysdate,'yy')||to_char(sysdate,'mm');
exception
 when NO_DATA_FOUND then
 select count(*)+1 into maxno from t_purapp where appno like '%'||to_char(sysdate,'yy')||to_char(sysdate,'mm')||'%';
 --select max()
vlpadnum:=4;
 insert into t_erpcode(erpcode,prifix,sequence,lpadnum)
 values ('PURAPPNO',to_char(sysdate,'yy')||to_char(sysdate,'mm'),maxno,vlpadnum);
end;
 :t_purapp.appno := 'Q'||:global.logon_user||to_char(sysdate,'yy')||to_char(sysdate,'mm')||lpad(maxno,vlpadnum,'0');
 end if;
 end if;
end;

 --遍歷樹
 select t_prtstrudef.prtno,
t_prtbasdef.prtdesc,
t_prtbasdef.mtltmrk,
t_prtstrudef.prtpqty,
t_prtbasdef.prtum,
t_prtstrudef.tranprtno
 from t_prtstrudef,t_prtbasdef
 where t_prtstrudef.prtno = t_prtbasdef.prtno
 connect by prior t_prtstrudef.prtno=t_prtstrudef.prntno
 start with t_prtstrudef.prntno=:BLOCK_BUTTON.PRTNO;
--
/*
 ** Built-in: FORMS_DDL
 ** Example: The expression can be a string literal.
*/
BEGIN
 Forms_DDL('create table temp(n NUMBER)');
 IF NOT Form_Success THEN
 Message ('Table Creation Failed');
ELSE
 Message ('Table Created');
 END IF;
END;

 --物料所屬大類判斷
 and (exists (select ''a'' from t_prtinclass c where c.classid='''||:blk_query.classid||''' and c.prtno=v_totqry.prtno ) or :blk_query.classid is null)

 --給值列表賦初值
declare
 cursor v_cur2 is select machtype A ,machtype B from t_gkdept order by machtype;
 N_INDEX NUMBER :=1;
begin
DELETE_LIST_ELEMENT('T_TPMSCKMTN.MACHTYPE',1);
 for c2 in v_cur2 loop
Add_List_Element('T_TPMSCKMTN.MACHTYPE',N_INDEX,C2.A,C2.B);
 N_INDEX := N_INDEX + 1;
 end loop;
end;
--
 --查詢重複數據
 select rpno from t_purtrace group by rpno having count(rpno) >18;

--
 --生成單據號
 PROCEDURE GET_PRTNO is
 v_sysdate varchar2(12);
 v_Svdictateno varchar2(24);
 v_DbodNo varchar2(12);
 n_count integer;
 v_count varchar2(10);
 n_count1 integer;
 n_count2 integer;
 v_count2 varchar2(10);
 n_num number;
 v_num varchar2(8);
BEGIN
 v_DbodNo:= 'ZS';
v_sysdate:=to_char(sysdate,'YYMMDD');

 --獲取滿足條件的記錄數
 select count(*)+1 into n_num
 from bas_prtbasdef
 where prtno like v_DbodNo||v_sysdate||'%';
 v_num := to_char(n_num);

 --填充
v_count:=lpad(v_num,'5','0');

 --合成為物料號
v_Svdictateno:=v_DbodNo||v_sysdate||v_count;

 --判斷是否存在該號碼
 select count(*) into n_count from bas_prtbasdef
 where prtno=v_Svdictateno;

 --不存在
 if n_count=0 then

 --把新物料號賦給參數p_prtno
 :parameter.p_prtno := v_Svdictateno;

 --若存在
 elsif n_count>0 then

 --遞增
n_count1:=v_count+1;
loop
v_count2:=lpad(n_count1,'5','0');
v_Svdictateno:=v_DbodNo||v_sysdate||v_count2;
 select count(*) into n_count2 from bas_prtbasdef
 where prtno=v_Svdictateno;
 if n_count2=0 then
 :parameter.p_prtno := v_Svdictateno;
 exit;--退出循環
 end if;
n_count1:=n_count1+1;
 end loop;
 end if;
 exception when others then
display_note(sqlerrm||sqlcode,:global.logon_user);

END;
--
 --當保存記錄時控制:同一物料質量編號不能相同。
DECLARE
 row_count NUMBER; --記錄行數
 row_num number; --所新建或修改記錄行數
 V_PRTLOTNO t_srmchkproject.prtlotno%type; --質量編號
BEGIN
 --獲取當前記錄行數
 row_num := :system.trigger_record;
first_record;
loop
row_count:=:system.trigger_record;
 V_PRTLOTNO := :t_srmchkproject.prtlotno;
 GO_RECORD(ROW_COUNT + 1);
loop
 --若質量編號相同
 if v_prtlotno = :t_srmchkproject.prtlotno then
 display_note('同種物料的質量編號不能相同!請改正。',:global.logon_user);
go_item('t_srmchkproject.prtlotno');
 return;--返回
--exit;
 end if;
 exit when :system.last_record = 'TRUE';
next_record;
 end loop;
 GO_RECORD(ROW_COUNT+1); --用以最後一行記錄判斷
 exit when :system.last_record = 'TRUE';
 --返回外層循環記錄
GO_RECORD(ROW_COUNT);
next_record;
 end loop;
commit_form;
 --返回當前記錄
go_record(row_num);
 EXCEPTION WHEN OTHERS THEN NULL;
END;
--
 --自動定位樹結構的焦點
DECLARE
 htree item;
 find_node Ftree.NODE;
begin
 htree:= Find_Item('T_BOM1.BOM');
 find_node := FTREE.FIND_TREE_NODE(htree,:T_PRTBASDEF_CREATE.PRTNO,FTREE.FIND_NEXT,FTREE.NODE_VALUE,FTREE.ROOT_NODE,FTREE.ROOT_NODE);
 IF NOT Ftree.ID_NULL(find_node) then --如果存在對應的節點
--pause;
 FTREE.SET_TREE_SELECTION(htree, FIND_NODE, FTREE.SELECT_TOGGLE);
 end if;
end;
--
 --殺死死進程
 select SID, serial#, USERNAME, SCHEMANAME, STATUS, OSUSER, OSUSER,TERMINAL, PROGRAM, LOGON_TIME from v$session;
 ALTER SYSTEM KILL SESSION '';
--
 select func.DECODEPASSWD(password) from t_user where username = '';
 select func.ENCODEPASSWD(password) from t_user where username = '';
 --用戶權限
 (:GLOBAL.LOGON_USER in (select object from t_roleuser where role=MODIFER and flag='0') or MODIFER=:GLOBAL.LOGON_USER)
--
 --列表項
DECLARE
 v_n Number;
BEGIN
 v_n := populate_group('rec_ptype');
populate_list('t_freesb.prntno','rec_ptype');
END;
 --提示對話框
 set_alert_property('note_alert',alert_message_text,'口令更改成功!');
 return_value := show_alert('note_alert');
--
 --改變按鈕標籤文本
DECLARE
 v_Count NUMBER;
 v_Label VARCHAR2(100);--記錄“全選按鈕”的標籤文本
BEGIN
Go_Block('user_col_comments');
 v_Label := Get_Item_Property('Blk_Control.Btn_Select_Col', Label);
First_Record;
 IF v_Label = '+' THEN
LOOP
 /*SELECT COUNT(*)
 INTO v_Count
 FROM t_Fieldrole
 WHERE Table_Name = :User_Col_Comments.Table_Name
 AND Column_Name = :User_Col_Comments.Column_Name
 AND Role = :t_Fieldrole.Role;*/
 --IF v_Count = 0 THEN
 :User_Col_Comments.Chk_Select := 1;
 --END IF;
 EXIT WHEN :System.Last_Record = 'TRUE';
NEXT_RECORD;
 END LOOP;
First_Record;
 Set_Item_Property('Blk_Control.Btn_Select_Col', Label,'-');
 Set_Item_Property('Blk_Control.Btn_Select_Col', TOOLTIP_TEXT,'取消選擇');
 ELSIF v_Label = '-' THEN
First_Record;
LOOP
 :User_Col_Comments.Chk_Select := 0;
 EXIT WHEN :System.Last_Record = 'TRUE';
NEXT_RECORD;
 END LOOP;
First_Record;
 Set_Item_Property('Blk_Control.Btn_Select_Col', Label,'+');
 Set_Item_Property('Blk_Control.Btn_Select_Col', TOOLTIP_TEXT,'選取全部');
 END IF;
EXCEPTION
 WHEN OTHERS THEN
NULL;
END;
--
 查看本文來源

 
Oracle數據庫-PL/SQL整理
 開發者在線Builder.com.cn更新時間: 2007-09-30作者: 中國IT實驗室來源:中國IT實驗室
 --觸發器失效
 Forms_Ddl('alter trigger cascade_warprt_qty disable');
 alter table t_Prthiswarinv disable all triggers;
 alter table t_Prthiswarinv enable all triggers;
 alter table T_PURORDER disable all triggers;
 alter table T_PURORDER enable all triggers;
--
 --注意null與任何值比較皆為空。
 select decode(instr(null,'a'),0,0,null,2,1) from dual;

 --拋出錯誤
Raise_Application_Error(-20100,
 :New.Prtno ||
 '已經登帳的庫存事務不能刪除,必須進行調錯處理!');
 --不同用戶之間共享數據
 --在cpc下
 grant select on T_LACKITEM to jh7;
 revoke select on T_LACKITEM from jh7;
 --在jh7下
 create table t_lackitem as select * from cpc.t_lackitem
 --在form中創建後台job
DECLARE
 Alert_Button NUMBER;
 v_Job NUMBER;
BEGIN
 Alert_Button := Display_Stop('是否確認結轉全部庫房?',
:Global.Logon_User);
 --是否確認對截至日期內所選定庫房的流水進行轉移?
 IF Alert_Button <> Alert_Button1 THEN
 --raise form_trigger_failure;
RETURN;
 END IF;
 v_Job := 489;
Sys.Dbms_Job.Submit(v_Job,
'cpcfcpgen;',
 SYSDATE + 1 / (24 * 60),
 'sysdate + 1000');
COMMIT;
Go_Item('t_mo.mono');
 Set_Item_Property('GEN_MRP.CONTINUE', Enabled, Property_False);
 Message('有限能力計劃將在一分鐘後開始生成,請耐心等待……');
EXCEPTION
 WHEN OTHERS THEN
 Display_Note(SQLCODE || SQLERRM, :Global.Logon_User);
END;
 --獲取查詢條件
 Tmp_Query01 := Get_Block_Property('T_PK', Last_Query);
 --查找某庫房、物料最後一條流水
--
 create or replace view v_prtio as
 Select invtranno,substr(invtranno,1,4)invtran,invstatus,prtno,warno,wardate,qtyonhand,1 columnno
 From t_prtio
--
 Select invtranno
 From (Select invtranno,
prtno,
 Sum(columnno) over(Partition By prtno,warno Order By wardate Desc,substr(invtranno,instr(invtranno,'0'))desc,Rowid Desc ) n
 From v_prtio)
 Where n = 1
 --查找流水錯誤(當前庫存數量與台帳不一致)
 Select a.prtno,invtranno From (Select invtranno, prtno,warno,qtyonhand From t_prtio Where invtranno In(Select invtranno From (Select invtranno, prtno,Sum(columnno) over(Partition By prtno,warno Order By wardate Desc,substr(invtranno ,instr(invtranno,'0'))desc,Rowid Desc ) n From v_prtio Where ((invtran = 'JZRK' And qtyonhand != 0 ) Or (invtran != 'JZRK'))And invstatus != 'B') Where n = 1))a,t_warprt b Where a.prtno = b.prtno And a.warno = b.warno And a.qtyonhand != b.onhandqty;
 --用Sql語句實現查找一列中第N大值
--
 select * from
 (select t.*,dense_rank() over (order by sal) rank from employee)
 where rank = N;
--
 select * from
 (select prtno,dense_rank() over (order by qtyonhand) n,qtyonhand from t_prtio)
 Where n = 1
--
 --查詢2005年全年日期
 select to_date('20050101','yyyymmdd')+rownum-1
 from all_objects
 where rownum <= to_char(to_date('20051231','yyyymmdd'),'ddd');
--
 --判斷是否可以輸入
DECLARE
 pl_id ParamList;
 v_string varchar2(1000);
 v_itemname varchar2(1000);
 enter_enabled VARCHAR2(100); --是否可以輸入
BEGIN
v_itemname:=:system.current_block||'.'||:system.current_item;
enter_enabled:=get_item_property(v_itemname,ENTERABLE);
 pl_id := Get_Parameter_List('calendar');
 IF NOT Id_Null(pl_id) THEN
Destroy_Parameter_List(pl_id);
 END IF;
 pl_id := Create_Parameter_List('calendar');
v_string:=name_in(v_itemname);
 Add_Parameter(pl_id, 'p_str',TEXT_PARAMETER,v_string);
Call_Form('input_str',no_hide,no_replace,no_query_only,pl_id);
 if enter_enabled='TRUE' then
copy(:global.str,v_itemname);
else
null;
 END IF;
Erase(:global.str);
END;
 --保持同步
Synchronize;
 --更新配套單狀態
declare
 cursor c_pk is select pkno from t_pk;
begin
 for c_1 in c_pk loop
 update t_pkitem2 set pkno=pkno where pkno=c_1.pkno
 and rownum = 1;
 end loop;
end;
 --游標變量
declare
 type v_cursor is ref cursor;
 cur_pknew v_cursor;
begin
 if :blk_pk.pkrule=1 then
 open cur_pknew for select ……
 elsif :blk_pk.pkrule=2 then
 open cur_pknew for select ……
 end if;
loop
 fetch cur_pknew into ……
 exit when cur_pknew%notfound;
 end loop;
 close cur_pknew;
end;

 --轉移數據
DECLARE
 sql_cursor integer;
 retu integer;
 n_position integer;
 n_len integer;
 button_value number;
 v_where varchar2(1000):= :system.last_query;
BEGIN
set_alert_property('stop_alert',alert_message_text,
 '確認把監控記錄導入到歷史數據庫? 導出後,當前監控記錄將被清空! ');
bell;
 button_value := show_alert('stop_alert');
 IF button_value = alert_button1 then
 n_position:= INSTR(v_where,'WHERE');
 if n_position > 0 then
 v_where := SUBSTR(v_where, n_position);
 n_position:= INSTR(v_where,'order');
 v_where := SUBSTR(v_where,1, n_position-1);
else
 v_where := ' ';
 end if;
 message('正在導出到歷史記錄,請稍等...',NO_ACKNOWLEDGE);
 sql_cursor := dbms_sql.open_cursor;
 dbms_sql.parse(sql_cursor,'insert into t_monitor_his select * from t_monitor '||v_where,1);
 retu := dbms_sql.execute(sql_cursor);
 dbms_sql.parse(sql_cursor,'delete from t_monitor '||v_where,1);
 retu := dbms_sql.execute(sql_cursor);
dbms_sql.close_cursor(sql_cursor);
 commit work;
 message('保存完畢!',NO_ACKNOWLEDGE);
go_block('t_monitor');
--clear_block;
execute_query;
 END IF;
END;
 --顯示終端用戶
 select userenv('terminal') from dual;
 --更新部門不一致的數據
 Update jh7.lean_user a Set a.deptno=(Select
 quality.t_user.deptno from quality.t_user Where
 quality.t_user.username = a.username)
 Where Exists (Select 'a' From quality.t_user Where username = a.username And deptno != nvl(a.deptno,'&'));
 --塊中項目的控制.
Declare
 vItemName t_fundef.funcode%TYPE;
 vFunflag varchar2(1);
 vBlock varchar2(30);
BEGIN
 vBlock := 'BLK_MPS';
 vItemName := Get_Block_Property(vBlock,First_item);
 WHILE ( vItemName IS NOT NULL ) LOOP
Begin
 Select to_char(f_i_value) into vFunFlag From t_Parameter
 Where f_name = vItemName;
 IF vFunFlag = '0' then
 if vItemName = 'MPSFPRMT' then
 :BLK_MPS.MPSFPRMT := '0';
 elsif vItemName = 'MPSFPRMT1' then
 :BLK_MPS.MPSFPRMT1 := '0';
 elsif vItemName = 'MPSEOMTN' then
 :BLK_MPS.MPSEOMTN := '0';
 elsif vItemName = 'SALORMTN' then
 :BLK_MPS.SALORMTN := '0';
 end if;
 END IF;

 Exception When NO_DATA_FOUND Then
null;
End;
 vItemName := Get_Item_Property(vBlock||'.'||vItemName, NEXTITEM );
 END LOOP;
exception
 when others then
null;
END;
--example
 FUNCTION Stat_Roll(p_Sign VARCHAR2) RETURN NUMBER IS
 --月終統計
 --vCurrentForm Varchar2(30);
 Vblockname VARCHAR2(30);
 Vitemname VARCHAR2(30);
 v_Sumsign NUMBER := 0;
 v_Sumroll NUMBER := 0;
 v_Itemvalue VARCHAR2(3);
BEGIN
 --vCurrentForm := upper(GET_APPLICATION_PROPERTY(CURRENT_FORM_NAME));
 --vBlockName := upper(Get_Form_Property(vCurrentForm,First_Block));
 Vblockname := 'T_ROLLBOOK';
 --Vitemname := Upper(Get_Block_Property(Vblockname, First_Item));
 Vitemname := 'DATE01';
 WHILE (Vitemname IS NOT NULL) LOOP
 v_Itemvalue := Name_In('T_ROLLBOOK' || '.' || Vitemname);
BEGIN
 SELECT Decode(v_Itemvalue, p_Sign, 1, NULL, 0, 0)
 INTO v_Sumsign
 FROM Dual;
EXCEPTION
 WHEN OTHERS THEN
 v_Sumroll := 0;
END;

 v_Sumroll := v_Sumroll + v_Sumsign;
 IF Vitemname = 'DATE31' THEN
EXIT;
 END IF;

 Vitemname := Get_Item_Property(Vblockname || '.' || Vitemname, Nextitem);
 END LOOP;
 --vBlockName := Get_Block_Property( vBlockName, NEXTBLOCK );
 RETURN v_Sumroll;
END;
--
 --獲取複選框的值
 IF Checkbox_Checked(:SYSTEM.CURRENT_ITEM) THEN
null;
ELSE
NULL;
 END IF;

 --庫存差錯
 SELECT *
 FROM (SELECT Warno, SUM(Onhandqty * Prtlprc) Qty
 FROM t_Waritemprt a, t_Prtbasdef b
 WHERE a.Prtno = b.Prtno
 GROUP BY a.Warno) g,
 (SELECT Warno, SUM(Onhandqty * Prtlprc) Qty
 FROM t_Warprt a, t_Prtbasdef b
 WHERE a.Prtno = b.Prtno
 GROUP BY a.Warno) b,
 (SELECT Warno, SUM(Onhandqty * Prtlprc) Qty
 FROM t_Prthisinvitem a, t_Prtbasdef b
 WHERE a.year= 2005 And a.Period = '4' AND a.Prtno = b.Prtno
 GROUP BY a.Warno) t
 WHERE g.Warno = b.Warno AND g.Warno = t.Warno AND
 (g.Qty != b.Qty OR g.Qty != t.Qty);
 --查詢子項皆為完成而主單仍為正常的申請單
 Select appno From t_msi Where appno in(Select Distinct appno From t_msiitem Where appno in(Select appno From (Select appno,Count(Distinct appnoflag) counts From t_msiitem Group By appno) Where counts = 1) And appnoflag = '4') And msiflag = '0'
 --動態構造值列表
DECLARE
 rg_name VARCHAR2(40) := 'group_VALUE';
 rg_id RecordGroup;
 lov_id LOV;
 errcode NUMBER;
 V_Counts number;
BEGIN
 /* ** Make sure group doesn't already exist */
 rg_id := Find_Group(rg_name);
 /* ** If it exist, delete it. */
 IF NOT Id_Null(rg_id) THEN
 Delete_Group( rg_id );
 END IF;
 /*create it and add the two ** necessary columns to it. */
 --IF :T_ROLEOPERATE.fieldname = 'GLOODGROUP' THEN
 SELECT COUNT(*) INTO v_Counts FROM T_listval where flags = :T_ROLEOPERATE.fieldname;
 IF V_Counts >= 1 THEN
 rg_id := Create_Group_From_Query(rg_name,
 'SELECT distinct '||:T_ROLEOPERATE.fieldname||' value ' ||
 ' from t_hrmuser');
--SET_ITEM_PROPERTY('T_ROLEOPERATE.fieldname',LOV_NAME,'LOV_VALUE');
ELSE
 rg_id := Create_Group_From_Query(rg_name,
 'SELECT distinct '||:T_ROLEOPERATE.fieldname||' value ' ||
 ' from t_hrmuser');
--SET_ITEM_PROPERTY('T_ROLEOPERATE.fieldname',LOV_NAME,'');
 END IF;
 lov_id := Find_LOV('LOV_VALUE');
 errcode := Populate_Group( rg_id );
Set_LOV_Property(lov_id,GROUP_NAME,'group_VALUE');
 :T_Roleoperate.Value := null;
 EXCEPTION WHEN others then
 display_note(sqlcode||sqlerrm, :global.logon_user);
END;
 --調用的FORM僅允許查詢。
CALL_FORM('Hrmmenmtn',no_hide,no_replace,query_only,pl_id);
 --賦初始值
 Default_Value( '0', ptr_name );
 --要找到某月中所有周五的具體日期select to_char(td,'YY-MM-DD') from (
 select trunc(sysdate, 'MM')+rownum-1 as d
 from dba_objects
 where rownum < 32) t
 where to_char(td, 'MM') = to_char(sysdate, 'MM') --找出當前月份的周五的日期and trim(to_char(td, 'Day')) = '星期五'
--------
03-05-02
03-05-09
03-05-16
03-05-23
03-05-30

如果把where to_char(td, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即為查找當前月份的前三個月中的每週五的日期。
 --rownum的用法:
只能用以上符號(<、<=、!=)。
 select * from tablename where rownum != 10;返回的是前9條記錄。
不能用:>,>=,=,Between...and。 由於rownum是一個總是從1開始的偽列,Oracle認為這種條件不成立,查不到記錄.

另外,這個方法更快:
 select * from (
 select rownum r,a from yourtable
 where rownum <= 20
 order by name )
 where r > 10
這樣取出第11-20條記錄!(先選再排序再選)
要先排序再選則須用select嵌套:內層排序外層選。

 rownum是隨著結果集生成的,一旦生成,就不會變化了;同時,生成的結果是依次遞加的,沒有1就永遠不會有2!
 rownum是在查詢集合產生的過程中產生的偽列,並且如果where條件中存在rownum條件的話,則:
 1:假如判定條件是常量,則:
只能rownum = 1, <=大於1的自然數, =大於1的數是沒有結果的,大於一個數也是沒有結果的即當出現一個rownum不滿足條件的時候則查詢結束this is stop key !
 2:當判定值不是常量的時候若條件是= var ,則只有當var為1的時候才滿足條件,這個時候不存在stop key ,必須進行full scan ,對每個滿足其他where條件的數據進行判定選出一行後才能去選rownum=2的行……
 --顯示圖片READ_IMAGE_FILE
declare
 VHOME VARCHAR2(100);
begin
 vhome := :GLOBAL.VHOME;
READ_IMAGE_FILE(vhome||'PICMENU_MOVE.BMP','BMP','BLK_USERMENU_EDIT.IMG_SHOW');
end;

arrow
arrow
    全站熱搜

    oracleD2K 發表在 痞客邦 留言(0) 人氣()