open MMT.distributions = null on transaction type:  WIP Lot Split

 

 

 

打开物料事务处理界面,发现事务处理类型为:WIP Lot Split点击其 distributions 按键, 没有任何科目ACCOUNT信息。

old fixed SQL:
update mtl_material_transactions
set costed_flag = 'N'
where transaction_id = &wls_transaction_id;
应用以上修正SQL,之后重启 Cost Manager,还是没有生成 account 科目资料,但 distributions 按钮由灰变亮了,可以点击了。

 

针对此问题进行实验,得到以下表结构的数据变化:

实验步骤:

1.       MMT.distributions里的科目分录数据是由于成本管理器处理而生成,故而执行实验前先关闭Cost Manager,目的在于观察Cost Manager启用后,对表结构变化的影响

2.       执行 WIP Lot Split之前,先计算 ORACLE EBS DB 后台所有表的总记录数与最新更新日期

3.       进入ORACLE EBS APPS应用界面操作WIP Lot Split

4.       再次计算ORACLE EBS DB后台所有表的总记录数与最新更新日期

5.       找出总记录数或最新更新日期有差异的表

6.       启动成本管理器Cost Manager,再次计算 ORACLE EBS DB 后台所有表的总记录数与最新更新日期,以得知成本管理在此时对后台表做了哪些处理

SQL Script:

 

--create table

create table cux_dev_analysis_tables

(

owner    varchar2(20),

table_name varchar2(100),

sql_count varchar2(3000),

sql_last_update_date varchar2(3000),

count1  number,

count2  number,

count3  number,

count4  number,

count5  number,

count6  number,

count7  number,

count8  number,

count9  number,

count10  number,

last_update_date1 varchar2(30),

last_update_date2 varchar2(30),

last_update_date3 varchar2(30),

last_update_date4 varchar2(30),

last_update_date5 varchar2(30),

last_update_date6 varchar2(30),

last_update_date7 varchar2(30),

last_update_date8 varchar2(30),

last_update_date9 varchar2(30),

last_update_date10 varchar2(30),

remark   varchar2(3000),

process_flag   varchar2(5)

);

 

drop table cux_dev_analysis_tables;

 

delete from cux_dev_analysis_tables;

 

==========================================================================

 

insert  into cux_dev_analysis_tables(owner, table_name, sql_count, process_flag)

select

owner,

object_name,

'select count(*) from '|| object_name  sql_analysis

, 'C1'

from dba_objects obj

where 1=1

and owner  in(

'AP',

'APPLSYS',

'APPS',

'AR',

'BOM',

'CE',

'CLN',

'CN',

'CS',

--'CSC',

--'CSD',

'ENG',

'FA',

'GL',

--'HR',

'INV',

--'JTF',

--'JTM',

--'JTS',

'OE',

'ONT',

'PO',

'QA',

'QP',

'WIP',

'WMS',

'WPS',

'WSH',

'WSM',

'XDO',

'XLA'

)

and  object_name not like 'CUX%'

and  object_name not like '%$%'

and  object_name not like '%#%'

and object_type = 'TABLE'

order by owner asc, object_name asc

;

 

==========================================================================

 

 

delete

from cux_dev_analysis_tables

where 1=1

and (table_name like '%BAK%'

    OR table_name like '%BK%'

    OR table_name like 'CUX%'

    OR table_name like '%BACKUP%')

;

 

delete

from cux_dev_analysis_tables

where 1=1

and  cux_dev_analysis_tools.digit_table(table_name) = 1

;

 

 

==========================================================================

 

update cux_dev_analysis_tables dat

set dat.sql_last_update_date = 'SELECT MAX(LAST_UPDATED_DATE) FROM ' || table_name

where 1=1

and exists (

select 'X'

from all_tab_columns atc

where 1=1

and atc.column_name = 'LAST_UPDATED_DATE'

and atc.table_name = dat.table_name

)

;

 

 

update cux_dev_analysis_tables dat

set dat.sql_last_update_date = 'SELECT MAX(LAST_UPDATE_DATE) FROM ' || table_name

where 1=1

and exists (

select 'X'

from all_tab_columns atc

where 1=1

and atc.column_name = 'LAST_UPDATE_DATE'

and atc.table_name = dat.table_name

)

;

 

==========================================================================

 

 

update cux_dev_analysis_tables

   set count1 = cux_dev_analysis_tools.execute_immediate_sql (sql_count)

      ,last_update_date1 = decode (sql_last_update_date,null, cux_dev_analysis_tools.execute_immediate_sql (sql_last_update_date))

      ,process_flag = 'P1';

 

 

     

update cux_dev_analysis_tables

   set count2 = cux_dev_analysis_tools.execute_immediate_sql (sql_count2)

      ,last_update_date2 = decode (sql_last_update_date,null, cux_dev_analysis_tools.execute_immediate_sql (sql_last_update_date))

      ,process_flag = 'P2';     

     

     

 

 

update cux_dev_analysis_tables

   set count3 = cux_dev_analysis_tools.execute_immediate_sql (sql_count)

      ,last_update_date3 = decode (sql_last_update_date,null, cux_dev_analysis_tools.execute_immediate_sql (sql_last_update_date))

      ,process_flag = 'P3';          

 

==========================================================================

    

     

select

'SELECT * FROM ' || table_name || ';',

cda.*

from cux_dev_analysis_tables  cda

where 1=1

and (count1 <> count2 or last_update_date1 <> last_update_date2 )

;     

 

 

 

select

'SELECT * FROM ' || table_name || ';',

cda.*

from cux_dev_analysis_tables  cda

where 1=1

and (count3 <> count2 or last_update_date3 <> last_update_date2 )

;

 

==========================================================================

 

Package:

CREATE OR REPLACE PACKAGE APPS.CUX_DEV_ANALYSIS_TOOLS

AS

TYPE T_CURSOR IS REF CURSOR;

FUNCTION EXECUTE_IMMEDIATE_SQL(P_SQL IN VARCHAR2) RETURN NUMBER;

FUNCTION DIGIT_TABLE(P_TABLE_NAME IN VARCHAR2) RETURN NUMBER;

END;

/

CREATE OR REPLACE PACKAGE BODY APPS.CUX_DEV_ANALYSIS_TOOLS

AS

   FUNCTION EXECUTE_IMMEDIATE_SQL (P_SQL IN VARCHAR2)

      RETURN NUMBER

   IS

      V_RESULT   NUMBER := 0;

   BEGIN

      EXECUTE IMMEDIATE P_SQL INTO V_RESULT;

 

      RETURN V_RESULT;

   EXCEPTION

      WHEN OTHERS

      THEN

         RETURN -1;

   END;

 

   FUNCTION DIGIT_TABLE (P_TABLE_NAME IN VARCHAR2)

      RETURN NUMBER

   IS

      NUM_STEP          NUMBER := 0;

      V_RESULT   NUMBER := 0;

   BEGIN

      LOOP

         EXIT WHEN NUM_STEP > 9;

         SELECT INSTR (P_TABLE_NAME, TO_CHAR (NUM_STEP)) INTO V_RESULT FROM DUAL;

         IF (V_RESULT > 0)

         THEN

            RETURN 1;

         END IF;

         NUM_STEP := NUM_STEP + 1;

      END LOOP;

      RETURN -1;

   END;

END;

/

 

找出有差异的表,并分析表数据变化:

 

--stop cost manager

--wip lot split

--start cost manager

 

--compare diff from stop cost manager >>> wip lot split >>> start cost manager

==============================================================================

 

--S       wip lot split 在启动cost manager前后的相应数据行(相同)

--D12     wip lot split 在启动cost manager前后的相应数据行(成本管理关闭时数据行 - 成本管理器开启时数据行)

--D21     wip lot split 在启动cost manager前后的相应数据行(成本管理器开启时数据行 - 成本管理关闭时数据行)

 

 

--MMT

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_MMT_BAK130917001

INTERSECT

SELECT * FROM CUX_MMT_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_MMT_BAK130917001

MINUS

SELECT * FROM CUX_MMT_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_MMT_BAK130917002

MINUS

SELECT * FROM CUX_MMT_BAK130917001

) D21

;

 

 

=================================================

 

--WDJ

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WDJ_BAK130917001

INTERSECT

SELECT * FROM CUX_WDJ_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WDJ_BAK130917001

MINUS

SELECT * FROM CUX_WDJ_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WDJ_BAK130917002

MINUS

SELECT * FROM CUX_WDJ_BAK130917001

) D21

;

 

 

=================================================

 

--WE

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WE_BAK130917001

INTERSECT

SELECT * FROM CUX_WE_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WE_BAK130917001

MINUS

SELECT * FROM CUX_WE_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WE_BAK130917002

MINUS

SELECT * FROM CUX_WE_BAK130917001

) D21

;

 

 

=================================================

 

--WO

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WO_BAK130917001

INTERSECT

SELECT * FROM CUX_WO_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WO_BAK130917001

MINUS

SELECT * FROM CUX_WO_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WO_BAK130917002

MINUS

SELECT * FROM CUX_WO_BAK130917001

) D21

;

 

=================================================

 

 

--WOR

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WOR_BAK130917001

INTERSECT

SELECT * FROM CUX_WOR_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WOR_BAK130917001

MINUS

SELECT * FROM CUX_WOR_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WOR_BAK130917002

MINUS

SELECT * FROM CUX_WOR_BAK130917001

) D21

;

 

 

=================================================

 

--WOY

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WOY_BAK130917001

INTERSECT

SELECT * FROM CUX_WOY_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WOY_BAK130917001

MINUS

SELECT * FROM CUX_WOY_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WOY_BAK130917002

MINUS

SELECT * FROM CUX_WOY_BAK130917001

) D21

;

 

 

=================================================

 

--WRO

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WRO_BAK130917001

INTERSECT

SELECT * FROM CUX_WRO_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WRO_BAK130917001

MINUS

SELECT * FROM CUX_WRO_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WRO_BAK130917002

MINUS

SELECT * FROM CUX_WRO_BAK130917001

) D21

;

 

 

=================================================

 

 

--MOG

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_MOG_BAK130917001

INTERSECT

SELECT * FROM CUX_MOG_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_MOG_BAK130917001

MINUS

SELECT * FROM CUX_MOG_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_MOG_BAK130917002

MINUS

SELECT * FROM CUX_MOG_BAK130917001

) D21

;

 

 

=================================================

 

 

--WPB

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WPB_BAK130917001

INTERSECT

SELECT * FROM CUX_WPB_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WPB_BAK130917001

MINUS

SELECT * FROM CUX_WPB_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WPB_BAK130917002

MINUS

SELECT * FROM CUX_WPB_BAK130917001

) D21

;

 

 

=================================================

 

 

--WSRJ

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WSRJ_BAK130917001

INTERSECT

SELECT * FROM CUX_WSRJ_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WSRJ_BAK130917001

MINUS

SELECT * FROM CUX_WSRJ_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WSRJ_BAK130917002

MINUS

SELECT * FROM CUX_WSRJ_BAK130917001

) D21

;

 

 

=================================================

 

 

--WSSJ

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WSSJ_BAK130917001

INTERSECT

SELECT * FROM CUX_WSSJ_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WSSJ_BAK130917001

MINUS

SELECT * FROM CUX_WSSJ_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WSSJ_BAK130917002

MINUS

SELECT * FROM CUX_WSSJ_BAK130917001

) D21

;

 

 

=================================================

 

--WSMT

SELECT 'S' DIFF_FLAG,S.*

FROM(

SELECT * FROM CUX_WSMT_BAK130917001

INTERSECT

SELECT * FROM CUX_WSMT_BAK130917002

) S

UNION ALL

SELECT 'D12' DIFF_FLAG,D12.*

FROM(

SELECT * FROM CUX_WSMT_BAK130917001

MINUS

SELECT * FROM CUX_WSMT_BAK130917002

) D12

UNION ALL

SELECT 'D21' DIFF_FLAG,D21.*

FROM(

SELECT * FROM CUX_WSMT_BAK130917002

MINUS

SELECT * FROM CUX_WSMT_BAK130917001

) D21

;

 

=================================================

 

update mtl_material_transactions mmt
set costed_flag = 'N'
where 1=1
and mmt.transaction_id = &wls_transaction_id

 

 

UPDATE WSM_SPLIT_MERGE_TRANSACTIONS
SET COSTED = 1
WHERE 1=1
AND TRANSACTION_ID IN(
    SELECT TRANSACTION_ID FROM WSM_SM_RESULTING_JOBS 
    WHERE 1=1 AND WIP_ENTITY_ID IN(SELECT WIP_ENTITY_ID FROM WIP_ENTITIES WHERE 1=1 AND WIP_ENTITY_NAME LIKE 'G12%'))
AND TRANSACTION_ID = &WLS_SOURCE_TRANSACTION_ID;

 
 
 
 
 
 
 

 

 

update WIP_REQUIREMENT_OPERATIONS wro
set costed_quantity_issued = ( D21.costed_quantity_issued >>> D12.costed_quantity_issued )
where 1=1
and wip_entity_id in( &wls_source_job_id, &wls_job_id)

 
 
 
 
 
 

 

 

UPDATE WIP_PERIOD_BALANCES wpb
   SET TL_RESOURCE_IN = 0,
       TL_OVERHEAD_IN = 0,
       TL_OUTSIDE_PROCESSING_IN = 0,
       PL_MATERIAL_IN = 0,
       PL_MATERIAL_OVERHEAD_IN = 0,
       PL_RESOURCE_IN = 0,
       PL_OVERHEAD_IN = 0,
       PL_OUTSIDE_PROCESSING_IN = 0,
       TL_MATERIAL_OUT = 0,
       TL_MATERIAL_OVERHEAD_OUT = 0,
       TL_RESOURCE_OUT = 0,
       TL_OVERHEAD_OUT = 0,
       TL_OUTSIDE_PROCESSING_OUT = 0,
       PL_MATERIAL_OUT = 0,
       PL_MATERIAL_OVERHEAD_OUT = 0,
       PL_RESOURCE_OUT = 0,
       PL_OVERHEAD_OUT = 0,
       PL_OUTSIDE_PROCESSING_OUT = 0,
       TL_MATERIAL_VAR = 0,
       TL_MATERIAL_OVERHEAD_VAR = 0,
       TL_RESOURCE_VAR = 0,
       TL_OUTSIDE_PROCESSING_VAR = 0,
       TL_OVERHEAD_VAR = 0,
       PL_MATERIAL_VAR = 0,
       PL_MATERIAL_OVERHEAD_VAR = 0,
       PL_RESOURCE_VAR = 0,
       PL_OVERHEAD_VAR = 0,
       PL_OUTSIDE_PROCESSING_VAR = 0
 WHERE     1 = 1
       AND WIP_ENTITY_ID IN (&WLS_SPLIT_JOB_ID)
       AND WIP_ENTITY_ID IN (SELECT WIP_ENTITY_ID
                               FROM WIP_ENTITIES
                              WHERE 1 = 1 AND WIP_ENTITY_NAME LIKE 'G12%');

 
 
 
 
 
 
 
 
 

UPDATE WIP_PERIOD_BALANCES wpb
   SET
       TL_MATERIAL_OUT = 0,
       TL_MATERIAL_OVERHEAD_OUT = 0,
       TL_RESOURCE_OUT = 0,
       TL_OVERHEAD_OUT = 0,
       TL_OUTSIDE_PROCESSING_OUT = 0,
       PL_MATERIAL_OUT = 0,
       PL_MATERIAL_OVERHEAD_OUT = 0,
       PL_RESOURCE_OUT = 0,
       PL_OVERHEAD_OUT = 0,
       PL_OUTSIDE_PROCESSING_OUT = 0,
       TL_MATERIAL_VAR = 0,
       TL_MATERIAL_OVERHEAD_VAR = 0,
       TL_RESOURCE_VAR = 0,
       TL_OUTSIDE_PROCESSING_VAR = 0,
       TL_OVERHEAD_VAR = 0,
       PL_MATERIAL_VAR = 0,
       PL_MATERIAL_OVERHEAD_VAR = 0,
       PL_RESOURCE_VAR = 0,
       PL_OVERHEAD_VAR = 0,
       PL_OUTSIDE_PROCESSING_VAR = 0
 WHERE     1 = 1
       AND WIP_ENTITY_ID IN (&WLS_SOURCE_JOB_ID)
       AND WIP_ENTITY_ID IN (SELECT WIP_ENTITY_ID
                               FROM WIP_ENTITIES
                              WHERE 1 = 1 AND WIP_ENTITY_NAME LIKE 'G12%');

 
 
 
 
 
 
 
 
 

 

open MMT.distributions = null on transaction type: WIP Lot Split的更多相关文章

  1. zookeeper启动错误 transaction type: 2 error: KeeperErrorCode = NoNode for /hbase

    hbase伪分布式,与zookeeper同一台机器的时候,运行一段时间,启动zookeeper的时候,日志中有如下错误,导致无法启动zookeeper java.io.IOException: Fai ...

  2. org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'null' to required type 'double' for property 'band'; nested exception is org.springframework.core.convert.Con

    本文为博主原创,未经允许不得转载: 先将异常粘贴出来: 20:37:26,909 ERROR [com.suning.fucdn.controller.ProductDataStaticsContro ...

  3. leetcode 编译问题:Line x: member access within null pointer of type 'struct TreeNode'

    参考: LEETCODE 中的member access within null pointer of type 'struct ListNode' 解决 leetcode 编译问题:Line x: ...

  4. 力扣 报错 runtime error: load of null pointer of type 'const int'

    runtime error: load of null pointer of type 'const int' 要求返回的是int* 解决方案 1.指针使用malloc分配空间 用 int * p = ...

  5. swagger 报错:illegal defaultValue null for param type integer

    swagger(版本2.9.2) 刷新报错,错误信息如下图: 问题原因: 根据上面这句报错信息,点进去AbstractSerializableParameter.java:412可以看到 源码, @J ...

  6. Swagger2异常:Illegal DefaultValue null for parameter type integer java

    一.异常分析: Illegal DefaultValue null for parameter type integer`和`NumberFormatException: For input stri ...

  7. 解决 Illegal DefaultValue null for parameter type integer 异常

    该异常是由 swagger 引起的 swagger 版本 1.9.2 解决原因:重新导入 swagger-annotations 和 swagger-models 版本 为 1.5.21 pom.xm ...

  8. swagger2 Illegal DefaultValue null for parameter type integer

    问题,为了方便调试,引入了swagger2,但是在第一次访问的时候总是报 Illegal DefaultValue null for parameter type integer 让人看着很不输入 定 ...

  9. inceptor es表插入成功,返回报错you should set transaction.type before any DCL statement

    在finebi下用星环的连接驱动去写inceptor es表,发现插入能成功,但是返回一个报错: Caused by: java.sql.SQLException: Error to commit. ...

随机推荐

  1. 12天学好C语言——记录我的C语言学习之路(Day 9)

    12天学好C语言--记录我的C语言学习之路 Day 9: 函数部分告一段落,但是我们并不是把函数完全放下,因为函数无处不在,我们今后的程序仍然会大量运用到函数 //转入指针部分的学习,了解指针是什么 ...

  2. 12天学好C语言——记录我的C语言学习之路(Day 6)

    12天学好C语言--记录我的C语言学习之路 Day 6: 今天,我们要开始学习数组了. //①数组部分,数组的大小不能够动态定义.如下: //int n;   scanf("%d,& ...

  3. 【制作镜像Win*】系统安装

    图形化安装系统,在询问“进行何种类型的安装?”时,选择“自定义(高级)” 下一步看不到硬盘,如图: 选择“加载驱动程序”,安装驱动. 将相应版本的netkvm.inf和viostor.inf装上. 继 ...

  4. OpenJudge/Poj 1163 The Triangle

    1.链接地址: http://bailian.openjudge.cn/practice/1163 http://poj.org/problem?id=1163 2.题目: 总时间限制: 1000ms ...

  5. 深度模拟java动态代理实现机制系类之二

    这次我们要实现的是对任意接口,任意的方法进行特定的代理 这里不一样的只有Proxy类,要实现对所有方法进行代理,那么重点就在于获得接口的所有方法 import java.io.File; import ...

  6. JSP九大内置对象和四个作用域

    JSP九大内置对象和四个作用域 在学习JSP的时候,首先就要先了解JSP的内置对象,什么是内置对象呢?内置对象也叫隐含对象,就是不需要预先声明就可以在脚本代码和表达式中随意使用.而这样的内置对象在JS ...

  7. 省市选择(基于zepto.js)

    效果如下: <div class="clList overflow-h mt75"> <select class="pull-left cl-35 se ...

  8. jQuery手风琴广告展示插件

    效果说明:当鼠标移动到已折叠广告的标题后,折叠当前已展开的广告,并同步展开相应的折叠广告.这种Accordion效果,看似简单,但因为存在动画同步的问题,不能简单地用两个animate()来实现.必须 ...

  9. php判断手机浏览还是web浏览,并执行相应的动作

    正好需要,在网上找了好久,记录一下 function isMobile(){ $useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTT ...

  10. js中的referrer返回上一页使用介绍

    js中的referrer的用法举例. js完整代码:  <script language="javascript">  var refer=document.refer ...