pl/sql 整理

B300 16卡集群高吞吐部署实战:GLM-5.2与Kimi-K3优化指南 大模型推理集群的高吞吐能力,本质是硬件拓扑、模型特性与系统调度的深度协同。B300并非单纯显存升级的H100替代品,其双环NVLink拓扑、HBM3带宽特性及功耗散热约束,共同定义了16卡集群的物理性能天花板。GLM-5.2-NVFP4对显存带宽高度敏感,而Kimi-K3则更依赖NVLink一致性协议与精确model metadata配置——二者在相同硬件上需差异化部署策略。缓存命中率在此场景下已超越传统定义,演变为L1/L2/HBM三级协同、KV cache内存布局重构与跨卡共识缓存机制的设计问题。本文聚 阅读详情
--获取系统记录行数
  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;

 

--触发器失效
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(t.d,'YY-MM-DD') from (
  select trunc(sysdate, 'MM')+rownum-1 as d
  from dba_objects
  where rownum < 32) t
  where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期
  and trim(to_char(t.d, 'Day')) = '星期五'
  --------
  03-05-02
  03-05-09
  03-05-16
  03-05-23
  03-05-30
  
  如果把where to_char(t.d, '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||'PIC/MENU_MOVE.BMP','BMP','BLK_USERMENU_EDIT.IMG_SHOW');
end;


 

Plsql美化器--自动格式化sql 如果你在选项对话框上还没有选择任何美化事件,通过选择编辑菜单的PL/SQL 美化器项目、通过按工具栏里相应的按钮或通过使用被指派给它的功能键,你都可以明确地美化你的代码。在默认的情况下,在当前的 PL/SQL 编辑器里的所有代码都将被美化。 立即下载

相关推荐

基于树莓派5的AR头显开发:从硬件选型到Unity整合全解析

增强现实(AR)技术通过将虚拟信息叠加到真实世界,为用户提供沉浸式交互体验。其核心原理依赖于计算机视觉进行环境感知与空间定位,并结合实时3D渲染实现虚实融合。在工程实践中,嵌入式平台因其低成本、低功耗特性,成为探索AR应用边界的重要载体。本项目以树莓派5为核心,通过集成OpenCV进行ArUco标记识别实现精准空间定位,并利用MediaPipe完成手势交互,最终在Unity引擎中完成虚实场景的实时渲染与融合,为开发者提供了一个完整的、可亲手实践的AR系统开发方案。

weixin_32430941的博客 256

oracle+鼠标转圈,ORACLE Form 鼠标形态 CURSOR_STYLE

Oracle Forms Builder中,常会出现等待后台调用pck或者等待请求运行的情形。等待过程中,为了更友善地展现当前状态,防止用户方误操作,常会使用变更鼠标形态的方式。oracle form内置函数SET_APPLICATION_PROPERTY 的 CURSOR_STYLE 属性可以实现这一功能。SET_APPLICATION_PROPERTY(CURSOR_STYLE,'BUSY...

weixin_30552495的博客 249

VT System故障排查指南:从License验证到硬件连接全解析

本文详细解析VT System故障排查全流程,从License验证、Real Bus模式设置到硬件连接与VT6000组网配置。针对VT7900板卡等特殊设备提供专业解决方案,并分享系统级故障的二分法排查技巧,帮助工程师快速定位和解决CANoe环境下的各类硬件识别问题。

weixin_29269441的博客 256

CREATE_RECORD或者NEXT_RECORD导致 FRM-40102 错误

在做Form开发中,经常会遇到需要在一个块中创建一条或者是多条数据。首先,一般我们会先定位到最后一条记录(有时候会先执行查询:app_find.find('BLOCK_NAME ');查询出需要的数据然后做最后一条记录的定位)。移动当前记录到最后一条记录可以使用下面的语法: G

专注Oracle EBS---低调的奢华 4588

数字签名(Digital Signature)技术详解:从原理到实践

数字签名技术是数字世界身份认证和数据完整性的核心保障。它结合非对称加密和哈希函数两大密码学技术,实现双重安全防护:哈希函数确保数据完整性,非对称加密确保签名不可伪造。签名过程包括发送方用私钥加密文件哈希值生成签名,接收方用公钥验证签名并比对哈希值。RSA、DSA、ECDSA等主流算法各有特点,适用于不同场景。公钥基础设施(PKI)通过数字证书和CA认证建立信任链,确保公钥真实性。这套技术体系支撑着电子合同、软件认证、在线交易等各类数字安全应用,是现代网络信任体系的基石。

guigenyi的专栏 1373

Agentic RAG:RAG从静态到具有理解、推理、决策的Agentic RAG

RAG技术演进:从静态检索到智能代理 RAG(检索增强生成)技术经历了五个关键发展阶段:基础RAG(关键词检索)、高级RAG(语义理解)、模块化RAG(灵活架构)、图RAG(知识图谱)和最新的Agentic RAG(智能代理)。Agentic RAG通过引入自主AI代理,具备反思、规划、工具使用和多代理协作能力,实现了动态决策和自适应工作流。相比传统RAG的静态检索流程,Agentic RAG能处理复杂多步推理任务,通过自我改进机制提高输出质量,并支持多专业代理协作,显著提升了RAG系统在复杂场景下的表现。

2545

Form开发积累的常用代码

获取当前窗口 GET_VIEW_PROPERTY(GET_ITEM_PROPERTY(:SYSTEM.CURSOR_ITEM, ITEM_CANVAS),WINDOW_NAME) 设置金额显示格式 PROCEDURE FORMAT_PRICE(EVENT VARCHAR2) IS BEGIN   IF (EVENT IN ('WHEN-VALIDATE-ITEM','POST-QUE...

hutianci的专栏 579

运放+三极管恒流源电路设计实战:从原理到仿真一步到位(附Multisim文件)

本文详细解析了运放与三极管构建恒流源电路的核心原理,重点阐述了负反馈机制如何实现精准的电流控制。通过Multisim仿真实战,从电路搭建、参数计算到负载调整率与动态响应分析,一步步指导设计过程,并提供常见故障的调试技巧与PCB设计要点,帮助工程师从理论平稳过渡到可靠实践。

7z8x2c4v6b9的博客 711

在block中进行行循环

因为要将行里头的数据逐条取出进行处理。 Code 1GO_BLOCK(Block_Name); 2FIRST_RECORD; 3LOOP 4    .. 5    .. 6    .. 7EXIT WHEN :SYSTEM.LAST_RECORD ='TRUE';--TRUE一定要大写!!! 8NEXT_RECORD; 9END LOOP; 1011 begin12   go_block('HE...

weixin_34068198的博客 151

Moveit +Gazebo:搭建单臂机械臂仿真平台

Moveit +Gazebo:搭建单臂机械臂仿真平台

magic_invaid的博客 5294

手把手带你实现DAF-Net:零代码基础入门红外与可见光图像融合(从理论到实战)

本文介绍了红外与可见光图像融合技术及DAF-Net网络的应用。红外图像能捕捉热源但缺乏细节,可见光图像纹理丰富但在低光环境下表现不佳。DAF-Net采用双分支特征提取和动态注意力融合架构,能智能分配特征权重实现优势互补。文章详细讲解了环境配置、数据集准备(如TNO数据集)和预处理方法,并提供了DAF-Net的核心代码实现,包括特征提取、注意力融合和图像重建模块。通过该技术可在安防、自动驾驶等领域获得更优质的融合图像,提升视觉感知能力。

m0_71589036的博客 234

plsql 设置鼠标行执行_PLSQL Developer使用技巧整理

Shortcut:===============================================================================Edit/Undo Ctrl+ZEdit/Redo Shift+Ctrl+ZEdit/PL/SQL Beautifier Ctrl+W (自定义)Shift+Home 选择光标位置到行首Shift+E...

weixin_39892311的博客 832

【MATLAB】STM32电机调速闭环控制工程

本文提出了一种基于MATLAB仿真与STM32实现的直流电机闭环PID调速控制方案。通过MATLAB建立电机数学模型并进行参数整定,仿真验证了增量式PID算法在启停、稳态和抗扰动方面的优越性能。基于STM32F103搭建了硬件系统,实现了编码器测速、定时中断控制、PWM输出等功能。实测表明,该系统转速超调<2%、稳态误差±2r/min,具备快速响应和强抗扰能力。相比开环控制,闭环调速显著提升了动态性能和稳态精度。方案提供了完整的仿真代码和嵌入式工程源码,可直接应用于智能小车、工业传动等场景,具有较高的

unber的博客 50

pl/sql使用 oracle sqlplus,整理数据的小技巧-使用Excel 、SQLPLUS和PL/SQL developer

整理数据的小技巧-使用Excel 、SQLPLUS和PL/SQL developer下面介绍几个我们在数据整理中发现的小技巧。以下是我操作个一个示范,旨在说明这些小技巧,你可能有更好的实现方法。如果你需要转换的是Excel表,请从步骤3看起1.这是我们需要整理的新旧编码对照2.我先通过SQL*PLUS把这些数据做成EXCEL表,所以使用SQL*PLUS是因为它可以让我们自上而下选取一列。复制这些数...

weixin_39621185的博客 201

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

PL/SQL学习整理

PL/SQL@TOC PL/SQL官方学习文档整理 PL/SQL是 Procedure Language & Structured Query Language(过程语言与结构化查询语言) 的缩写。PL/SQL是对SQL语言存储过程语言的扩展。 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,...

犇犇 388

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PL/SQL详细整理

PL/SQL的优点: 1.提高应用程序的运行性能 2.模块化的设计思想(分页或一些共性的业务流程操作) 3.减少网络传输量 4.提高安全性 PL/SQL块由三个部分构成:定义部分,执行部分,异常处理部分 declare /*定义部分------>定义常量,变量,游标,异常,复杂数据类型   (这部分是可选的)*/ begin /*执行部分------->要执行的pl/

1354

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PL/SQL 知识整理(上)

学完plsql之后的简单整理,希望能对大家有用

L333456的博客 1031

Oracle tmpprts,Oracle数据库-PL/SQL整理(1)

Oracle数据库-PL/SQL整理(1)以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!获取系统记录行数 go_block( T_WARITEMPRT ); last_record; row_count:=:system trigger_record; system cursor_record execute_...

weixin_39593354的博客 218

PL/SQL基础之DECLARE部分(整理)

因为SQL只能访问、操作数据库,却不能进行程序设计,而Oracle PL/SQL是一种高级数据库程序设计语言,该语言专门用于对ORACLE数据库进行访问,并且可以进行过程处理。 *注:在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如CREATE table 等)的话,只能以动态的方式来使用。* *1. DML(data manipulation language)数据操纵语言:比如SELECT、UPDATE、INSERT、DELETE

TruthK的博客 6336

PL/SQL集合类型的整理学习

http://log-cd.iteye.com/blog/521177 PL/SQL集合类型是类似于高级语言数组的一种复合数据类型,集合类型包括索引表(PL/SQL表)、嵌套表(Nested Table)和变长数组(VARRAY)三种类型。<一>、索引表 索引表也称为PL/SQL表,它是Oracle早期版本用于处理PL/SQL数组的数据类型。索引表的元素个数没有限制,并且下标...

weixin_33989780的博客 272

PL/SQL 知识整理(下)

PL/SQL知识简单整理,适合学完做知识复习用。

L333456的博客 764

pl/sql使用部分整理

在工作中使用pl/sql工具,总结一下常用操作,以便以后复习,也希望帮助朋友们熟悉pl/sql操作! 1.pl/sql记住登录密码PL/SQL Developer->tools->Preferences->Oracle->Logon History, 在右边界面的"Definition"中,"Store history"是默认勾选的, 再勾选上"Store with ...

weixin_30718391的博客 110

PL/SQL编程整理1 -- 介绍

1.1    介绍<br />PL/sql是oracle在标准的sql语言上的扩展,pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句、循环语句和列外处理各种异常。块(block)是PL/sql的基本程序单元。<br />PL/sql优点:<br />a)         提高应用程序的运行性能<br />b)        模块化的设计思想<br />c)        减少网络传输量<br />d)        提高安全性<br />编写规范:<br />a)        

崇尚狼性的专栏 689

笔记--PL/SQL语句整理

SQL> select * from (select rownum m,tt. * from tt where rownum=1;          M      EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO ---------- ---------- ------

白飞飞_Alan 767

PL/SQL编程整理6 -- 函数

<br /><br />函数用于返回特定的数据,当建立函数时,在函数头部必须包含return字句,而在函数体内必须包含return语句返回的数据,使用create function来建立函数。<br />语法如下:<br />CREATE [OR REPLACE] FUNCTION function_name<br />[(argment [ { IN| IN OUT }] type,<br />         argment [ { IN | OUT | IN OUT } ] type]<br />R

崇尚狼性的专栏 801
上一篇: SVN服务器搭建和使用(三)
下一篇: javascript将字符串类型转换成日期进行比较
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值