回复: bobfang(匆匆过客)
谢谢,以下是相关表的定义
zccm0003:
-- Create table
create table ZCCM0003
(
CUSTOMER_PART_DESC CHAR(40) not null,
CUSTOMER_PART_NUMBER CHAR(20) not null,
CUST_CODE CHAR(5) not null,
INVOICE_NUMBER CHAR(10),
FIFO_DATE DATE not null,
LINE_NO NUMBER(10) not null,
QUANTITY FLOAT not null,
QUANTITY_INVOICED FLOAT not null,
SCH_DATE DATE,
CREATE_DATE DATE not null,
CREATE_BY CHAR(30) not null,
PART_RKEY NUMBER(10) not null,
CUSTOMER_RKEY NUMBER(10) not null,
INVOICE_RKEY NUMBER(10) not null,
ADJ_INVOICE CHAR(10)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ZCCM0003
add primary key (CUSTOMER_PART_DESC,CUSTOMER_PART_NUMBER,CUST_CODE,FIFO_DATE,LINE_NO,INVOICE_RKEY)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate indexes
create index D4 on ZCCM0003 (CUSTOMER_PART_DESC,CUSTOMER_PART_NUMBER,CUST_CODE)
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index ZCCM0003_IDX1 on ZCCM0003 (INVOICE_RKEY)
tablespace INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on ZCCM0003 to EPCAPPS;
grant select, insert, update, delete, references, alter, index on ZCCM0003 to JACKYHO with grant option;
grant select on ZCCM0003 to TAPPS;zccm0001:
create table ZCCM0001
(
CH_INVOICE CHAR(10) not null,
CH_DATE DATE not null,
CH_CUST_CODE CHAR(5),
CH_CONSIGNEE CHAR(45),
CH_BILL_ADDRESS_1 CHAR(30),
CH_BILL_ADDRESS_2 CHAR(30),
CH_BILL_ADDRESS_3 CHAR(30),
CH_BILL_ADDRESS_4 CHAR(30),
CH_STATE CHAR(3),
CH_ZIP CHAR(10),
CH_COUNTRY_CODE CHAR(20),
CH_COUNTRY_NAME CHAR(30),
CH_CUST_SHIP_NAME CHAR(20),
CH_SHIP_TO_ADDRESS_1 CHAR(30),
CH_SHIP_TO_ADDRESS_2 CHAR(30),
CH_SHIP_TO_ADDRESS_3 CHAR(30),
CH_SHIP_TO_ADDRESS_4 CHAR(30),
CH_CONSIGN_ADDRESS_1 CHAR(45),
CH_CONSIGN_ADDRESS_2 CHAR(45),
CH_CONSIGN_ADDRESS_3 CHAR(45),
CH_REF_INVOICE CHAR(10),
CH_REF_INV_RKEY NUMBER(10),
CH_CURR CHAR(5),
CH_EXCH_RATE NUMBER(20,5),
CH_TOOLING_CHARGE NUMBER(20,5),
CH_DISCOUNT_AMOUNT NUMBER(20,5),
CH_INV_AMOUNT NUMBER(20,5) not null,
CH_SCH_DATE DATE,
CH_DUE_DATE DATE,
CH_PO_NUMBER CHAR(40),
CH_SHIP_METHOD CHAR(40),
CH_PORT_DISCHARGE CHAR(20),
CH_COUNTRY_ORIGIN CHAR(30),
CH_PORT_DESTINATION CHAR(20),
CH_COUNTRY_DESTINATION CHAR(30),
CH_FORWARDER CHAR(20),
CH_INVOICE_NOTE_1 CHAR(70),
CH_INVOICE_NOTE_2 CHAR(70),
CH_INVOICE_NOTE VARCHAR2(4000),
CH_CUSTOMER_NOTE VARCHAR2(4000),
CH_COUNTRY_NOTE VARCHAR2(4000),
CH_REMARKS VARCHAR2(100),
CH_DRCR CHAR(1),
CH_RCD_STATUS NUMBER,
CH_PRT_STATUS NUMBER,
CH_MODIFY_DATE DATE,
CH_MODIFY_BY CHAR(30),
CH_CREATE_DATE DATE,
CH_CREATE_BY CHAR(30),
CH_INV_HEADER NUMBER,
CH_CUST_PICK_NOTE CHAR(20),
CH_ADJ NUMBER(10),
CH_ADJ_REASON CHAR(10)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ZCCM0001
add primary key (CH_INVOICE)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on ZCCM0001 to EPCAPPS;
grant select, update on ZCCM0001 to JACKYHO with grant option;
grant select on ZCCM0001 to TAPPS;
谢谢,以下是相关表的定义
zccm0003:
-- Create table
create table ZCCM0003
(
CUSTOMER_PART_DESC CHAR(40) not null,
CUSTOMER_PART_NUMBER CHAR(20) not null,
CUST_CODE CHAR(5) not null,
INVOICE_NUMBER CHAR(10),
FIFO_DATE DATE not null,
LINE_NO NUMBER(10) not null,
QUANTITY FLOAT not null,
QUANTITY_INVOICED FLOAT not null,
SCH_DATE DATE,
CREATE_DATE DATE not null,
CREATE_BY CHAR(30) not null,
PART_RKEY NUMBER(10) not null,
CUSTOMER_RKEY NUMBER(10) not null,
INVOICE_RKEY NUMBER(10) not null,
ADJ_INVOICE CHAR(10)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ZCCM0003
add primary key (CUSTOMER_PART_DESC,CUSTOMER_PART_NUMBER,CUST_CODE,FIFO_DATE,LINE_NO,INVOICE_RKEY)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate indexes
create index D4 on ZCCM0003 (CUSTOMER_PART_DESC,CUSTOMER_PART_NUMBER,CUST_CODE)
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index ZCCM0003_IDX1 on ZCCM0003 (INVOICE_RKEY)
tablespace INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on ZCCM0003 to EPCAPPS;
grant select, insert, update, delete, references, alter, index on ZCCM0003 to JACKYHO with grant option;
grant select on ZCCM0003 to TAPPS;zccm0001:
create table ZCCM0001
(
CH_INVOICE CHAR(10) not null,
CH_DATE DATE not null,
CH_CUST_CODE CHAR(5),
CH_CONSIGNEE CHAR(45),
CH_BILL_ADDRESS_1 CHAR(30),
CH_BILL_ADDRESS_2 CHAR(30),
CH_BILL_ADDRESS_3 CHAR(30),
CH_BILL_ADDRESS_4 CHAR(30),
CH_STATE CHAR(3),
CH_ZIP CHAR(10),
CH_COUNTRY_CODE CHAR(20),
CH_COUNTRY_NAME CHAR(30),
CH_CUST_SHIP_NAME CHAR(20),
CH_SHIP_TO_ADDRESS_1 CHAR(30),
CH_SHIP_TO_ADDRESS_2 CHAR(30),
CH_SHIP_TO_ADDRESS_3 CHAR(30),
CH_SHIP_TO_ADDRESS_4 CHAR(30),
CH_CONSIGN_ADDRESS_1 CHAR(45),
CH_CONSIGN_ADDRESS_2 CHAR(45),
CH_CONSIGN_ADDRESS_3 CHAR(45),
CH_REF_INVOICE CHAR(10),
CH_REF_INV_RKEY NUMBER(10),
CH_CURR CHAR(5),
CH_EXCH_RATE NUMBER(20,5),
CH_TOOLING_CHARGE NUMBER(20,5),
CH_DISCOUNT_AMOUNT NUMBER(20,5),
CH_INV_AMOUNT NUMBER(20,5) not null,
CH_SCH_DATE DATE,
CH_DUE_DATE DATE,
CH_PO_NUMBER CHAR(40),
CH_SHIP_METHOD CHAR(40),
CH_PORT_DISCHARGE CHAR(20),
CH_COUNTRY_ORIGIN CHAR(30),
CH_PORT_DESTINATION CHAR(20),
CH_COUNTRY_DESTINATION CHAR(30),
CH_FORWARDER CHAR(20),
CH_INVOICE_NOTE_1 CHAR(70),
CH_INVOICE_NOTE_2 CHAR(70),
CH_INVOICE_NOTE VARCHAR2(4000),
CH_CUSTOMER_NOTE VARCHAR2(4000),
CH_COUNTRY_NOTE VARCHAR2(4000),
CH_REMARKS VARCHAR2(100),
CH_DRCR CHAR(1),
CH_RCD_STATUS NUMBER,
CH_PRT_STATUS NUMBER,
CH_MODIFY_DATE DATE,
CH_MODIFY_BY CHAR(30),
CH_CREATE_DATE DATE,
CH_CREATE_BY CHAR(30),
CH_INV_HEADER NUMBER,
CH_CUST_PICK_NOTE CHAR(20),
CH_ADJ NUMBER(10),
CH_ADJ_REASON CHAR(10)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ZCCM0001
add primary key (CH_INVOICE)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on ZCCM0001 to EPCAPPS;
grant select, update on ZCCM0001 to JACKYHO with grant option;
grant select on ZCCM0001 to TAPPS;
ZFIN0005:
create table ZFIN0005
(
INVOICE_TYPE CHAR(2) not null,
INVOICE_NUMBER CHAR(10) not null,
INVOICE_DATE DATE not null,
CUST_CODE CHAR(5) not null,
CUSTOMER_NAME CHAR(30),
ABBR_NAME CHAR(10),
BILLING_ADDRESS_1 VARCHAR2(30),
BILLING_ADDRESS_2 VARCHAR2(30),
BILLING_ADDRESS_3 VARCHAR2(30),
BILLING_ADDRESS_4 VARCHAR2(30),
STATE VARCHAR2(3),
ZIP VARCHAR2(10),
BILLING_COUNTRY_CODE VARCHAR2(5),
BILLING_COUNTRY_NAME VARCHAR2(30),
PHONE VARCHAR2(14),
FAX VARCHAR2(14),
NET_PAY NUMBER,
CUST_SHIP_NAME VARCHAR2(20),
SHIP_TO_ADDRESS_1 VARCHAR2(30),
SHIP_TO_ADDRESS_2 VARCHAR2(30),
SHIP_TO_ADDRESS_3 VARCHAR2(30),
SHIP_TO_ADDRESS_4 VARCHAR2(30),
CONSIGNEE VARCHAR2(45),
CONSIGN_ADDRESS_1 VARCHAR2(45),
CONSIGN_ADDRESS_2 VARCHAR2(45),
CONSIGN_ADDRESS_3 VARCHAR2(45),
SALES_ORDER VARCHAR2(10),
PO_NUMBER CHAR(40),
PO_DATE DATE,
LINE_NO NUMBER not null,
CUSTOMER_PART_NUMBER VARCHAR2(20),
CUSTOMER_PART_DESC VARCHAR2(40),
FOB VARCHAR2(20),
DISCOUNT_SALES_ORDER FLOAT,
NO_OF_CARTONS NUMBER,
NO_OF_PANEL NUMBER,
QUANTITY_INVOICED FLOAT not null,
PART_PRICE NUMBER(20,5),
SO_CURR VARCHAR2(5),
SO_EXCH_RATE NUMBER,
UNIT_PRICE NUMBER(20,5) not null,
TOOLING_CHARGES NUMBER(20,5),
TOOLING_INV VARCHAR2(10),
DISCOUNT_AMOUNT NUMBER(20,5),
INVOICE_CURR VARCHAR2(5),
INVOICE_CURR_NAME VARCHAR2(40),
INVOICE_EXCH_RATE FLOAT not null,
INVOICE_TOTAL NUMBER(20,5) not null,
SCH_DATE DATE,
DUE_DATE DATE,
VEHICLE VARCHAR2(40),
PORT_DISCHARGE VARCHAR2(20),
COUNTRY_ORIGIN VARCHAR2(30),
PORT_DESTINATION VARCHAR2(20),
COUNTRY_DESTINATION VARCHAR2(30),
FORWARDER VARCHAR2(20),
INVOICE_STATUS NUMBER,
INVOICE_NOTE_1 VARCHAR2(70),
INVOICE_NOTE_2 VARCHAR2(70),
INVOICE_NOTE VARCHAR2(4000),
CUSTOMER_NOTE VARCHAR2(4000),
COUNTRY_NOTE VARCHAR2(4000),
REMARKS VARCHAR2(30),
DRCR VARCHAR2(1),
IFC_TYPE VARCHAR2(5),
IFC_USER VARCHAR2(30),
IFC_DATE DATE,
IFC_STATUS NUMBER not null,
FILL_DATE DATE not null,
FILL_STATUS NUMBER not null,
FILL_BY VARCHAR2(30),
INVOICE_RKEY NUMBER(10),
CUSTOMER_RKEY NUMBER(10),
CUST_SHIP_RKEY NUMBER(10),
SO_RKEY NUMBER(10),
PART_RKEY NUMBER(10),
CUSTOMER_PO_RKEY NUMBER(10),
SO_SHIP_RKEY NUMBER(10),
CR_NOTE_RKEY NUMBER(10)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ZFIN0005
add constraint INVOICE_TYPE unique (INVOICE_TYPE,INVOICE_NUMBER)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate indexes
create index D5 on ZFIN0005 (INVOICE_RKEY)
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index D6 on ZFIN0005 (PO_NUMBER)
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index ZFIN0003_IDX1 on ZFIN0005 (INVOICE_RKEY,INVOICE_DATE)
tablespace INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on ZFIN0005 to EPCAPPS;
grant select on ZFIN0005 to TAPPS;
ZDTA0010:
create table ZDTA0010
(
RKEY NUMBER(10) not null,
CUST_CODE CHAR(5),
CUSTOMER_NAME CHAR(30),
ABBR_NAME CHAR(10),
BILLING_ADDRESS_1 CHAR(30),
BILLING_ADDRESS_2 CHAR(30),
BILLING_ADDRESS_3 CHAR(30),
BILLING_ADDRESS_4 CHAR(30),
STATE CHAR(3),
ZIP CHAR(10),
BILLING_COUNTRY_CODE CHAR(5),
BILLING_COUNTRY_NAME CHAR(30),
PHONE CHAR(14),
FAX CHAR(14),
CUSTOMER_TYPE CHAR(20),
CUSTOMER_TYPE_DESC CHAR(30),
SALESMAN_TYPE CHAR(30),
SALESMAN_CODE CHAR(20),
SALESMAN_DESC CHAR(30),
CONTINENT CHAR(30),
COUNTRY_CODE CHAR(20),
COUNTRY_DESC CHAR(30),
NET_PAY NUMBER(10),
CUST_SHIP_NAME CHAR(20),
SHIP_TO_ADDRESS_1 CHAR(30),
SHIP_TO_ADDRESS_2 CHAR(30),
SHIP_TO_ADDRESS_3 CHAR(30),
SHIP_TO_ADDRESS_4 CHAR(30),
CONSIGNEE CHAR(45),
CONSIGN_ADDRESS_1 CHAR(45),
CONSIGN_ADDRESS_2 CHAR(45),
CONSIGN_ADDRESS_3 CHAR(45),
FILL_DATE DATE not null,
FILL_STATUS NUMBER not null,
FILL_BY CHAR(30)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ZDTA0010
add primary key (RKEY)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on ZDTA0010 to EPCAPPS;
grant select on ZDTA0010 to TAPPS;ZMST0001:
create table ZMST0001
(
MASTERKEY1 CHAR(50) not null,
MASTERKEY2 CHAR(100) not null,
SEQUENCE NUMBER(10) not null,
MASTERFIELD1 CHAR(50),
MASTERFIELD2 CHAR(50),
DESCRIPTION VARCHAR2(4000)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ZMST0001
add primary key (MASTERKEY1,MASTERKEY2,SEQUENCE)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on ZMST0001 to EPCAPPS;
grant select, insert, update, delete, references, alter, index on ZMST0001 to JACKYHO with grant option;
grant select on ZMST0001 to TAPPS;ZFIN0007:create table ZFIN0007
(
PART_RKEY NUMBER(10) not null,
VALID_DATE DATE not null,
DEF_VALUE NUMBER(2) not null,
UNIT_PRICE NUMBER(19,4) not null,
VALID_PRICE NUMBER(19,4) not null,
CRT_DATE DATE not null,
CRT_BY CHAR(50) not null,
MOD_DATE DATE,
MOD_BY CHAR(50)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ZFIN0007
add primary key (PART_RKEY,VALID_DATE)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Grant/Revoke object privileges
grant select on ZFIN0007 to EPCAPPS;
grant select on ZFIN0007 to TAPPS;
HY_CCM003WORK:
create table HY_CCM003WORK
(
CUST_CODE VARCHAR2(10),
CUSTOMER_NAME VARCHAR2(30),
CUSTOMER_PART_DESC VARCHAR2(50),
CUSTOMER_PART_NUMBER VARCHAR2(30),
BALANCE_QTY NUMBER default 0,
UNIT_PRICE NUMBER default 0,
QTY1 NUMBER default 0,
QTY2 NUMBER default 0,
QTY3 NUMBER default 0,
QTY4 NUMBER default 0,
QTY5 NUMBER default 0,
QTY6 NUMBER default 0,
QTY7 NUMBER default 0
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
1、open aging_cur for...处的逻辑似乎有问题。
2、表HY_CCM003WORK必须要增加索引。按过程中的逻辑,可以增加一个按CUST_CODE和CUSTOMER_PART_NUMBER列的主键。
3、表ZDTA0010须加按cust_code的索引。
4、表ZFIN0005需要增加按PART_RKEY和INVOICE_DATE的索引。
5、函数fun_get_partprice中的select count(*) into ...语句的order by没有必要,可以去除。
6、函数fun_get_partprice中的select ... into ... where ... and rownum<2 order by ...语句实际上执行的结果与你想要的不同,需改为select ... into ... from (select ... from ... where ... order by ...) where rownum=1;
不过有个问题想问问你,
6、函数fun_get_partprice中的select ... into ... where ... and rownum<2 order by ...语句实际上执行的结果与你想要的不同,需改为select ... into ... from (select ... from ... where ... order by ...) where rownum=1
改成后面那种写法以后该条语句就慢了好几倍啊
那种一来岂不是整个存储过程更慢了啊??
SELECT * FROM ZCCM0003 c3
WHERE ( c3.ADJ_INVOICE is null
and exists (select f5.INVOICE_RKEY from ZFIN0005 f5
where f5.INVOICE_RKEY = c3.INVOICE_RKEY
and f5.INVOICE_DATE <= to_date(cut_date,'yyyy-mm-dd')
and f5.INVOICE_TYPE = 'PA'
)
and ( c3.INVOICE_NUMBER is null
or exists (select CH_INVOICE from ZCCM0001
where CH_INVOICE = c3.INVOICE_NUMBER
and CH_RCD_STATUS <> 8
and CH_DATE > to_date(cut_date,'yyyy-mm-dd')
)
)
) --此处比原先增加一个括号
or ( c3.ADJ_INVOICE is not null
and exists (select CH_INVOICE from ZCCM0001
where CH_DATE <= to_date(cut_date,'yyyy-mm-dd')
and CH_RCD_STATUS <> 8
and CH_INVOICE = c3.ADJ_INVOICE
)
and ( c3.INVOICE_NUMBER is null
or exists (select CH_INVOICE from ZCCM0001
where CH_INVOICE = c3.INVOICE_NUMBER
and CH_RCD_STATUS <> 8
and CH_DATE > to_date(cut_date,'yyyy-mm-dd')
)
)
); --此处比原先减少一个括号
也就是你可能是想要对ADJ_INVOICE是否为null做不同处理。
上面的语句还可以简化为
SELECT * FROM ZCCM0003 c3
WHERE( ( c3.ADJ_INVOICE is null
and exists (select f5.INVOICE_RKEY from ZFIN0005 f5
where f5.INVOICE_RKEY = c3.INVOICE_RKEY
and f5.INVOICE_DATE <= to_date(cut_date,'yyyy-mm-dd')
and f5.INVOICE_TYPE = 'PA'
)
) --此处比原先增加一个括号
or ( c3.ADJ_INVOICE is not null
and exists (select CH_INVOICE from ZCCM0001
where CH_DATE <= to_date(cut_date,'yyyy-mm-dd')
and CH_RCD_STATUS <> 8
and CH_INVOICE = c3.ADJ_INVOICE
)
)
)
and( c3.INVOICE_NUMBER is null
or exists (select CH_INVOICE from ZCCM0001
where CH_INVOICE = c3.INVOICE_NUMBER
and CH_RCD_STATUS <> 8
and CH_DATE > to_date(cut_date,'yyyy-mm-dd')
)
); --此处比原先减少一个括号但上面的语句可能还不一定是你想要做的,你应当先搞清楚自己的逻辑。