存储过程中的数据为文本文件导出在Oracle

问题描述:

我写了一个存储过程如下:存储过程中的数据为文本文件导出在Oracle

CREATE OR REPLACE PROCEDURE CROSSMANUFAC IS 
product   prod.product_number%TYPE; 

BEGIN 
DBMS_OUTPUT.enable(); 

delete from product; 
insert into product select unique product_number from prod p where mynumber not in('R44','R76','R79','R20','R02', 
'RY1','R71','R38','R58','RM8','RW8','R74','R73', 
'R99','R72','R19','R33','RN3','R34','RP8','R22', 
'R75','R01','R67','R27','R28','R57','RC5','RW7', 
'RZ9','R77','R07','RW6'); 

commit; 

DBMS_OUTPUT.put_LINE ('No of rows inserted into product '|| SQL%ROWCOUNT); 

delete from ABCD; 

INSERT INTO ABCD(BATCH_LOT_ID,STAGE,DED_DATE,DATE_CODE) 
(SELECT BATCH_LOT_ID,STAGE_FK,to_char(DED_DT, 'YYYYMMDD'),SUBSTR(DT_CD,3,4) FROM DED D WHERE D.product_number_FK IN 
(SELECT * FROM product) and D.FLOG_TRANS_DT_FK =(sysdate -1)); 



commit; 


DBMS_OUTPUT.put_LINE ('No of rows to be pushed to ABCD '|| SQL%ROWCOUNT); 



DBMS_OUTPUT.put_LINE ('FUNLOC   '||' STAGE   ' || 'SEQN_NUM'); 



commit; 

DBMS_OUTPUT.put_LINE ('No of rows to be pushed to ABCD '|| SQL%ROWCOUNT);  


END CROSSMANUFAC; 
/

我想在这样的方式,这样的数据将得到导出到一个修改此过程文本文件。 如何实现此功能以及在此过程中的修改位置。 谢谢。

+0

您应该指定要导出哪些数据......仅在这里看到DELETE和INSERT。没有选择。 –

+0

嗨托马斯,谢谢你指出正确。其实我想导出以下选择查询的数据:SELECT BATCH_LOT_ID,STAGE_FK,to_char(DED_DT,'YYYYMMDD'),SUBSTR(DT_CD,3,4)FROM DED D WHERE D.product_number_FK IN (SELECT * FROM product)和D.FLOG_TRANS_DT_FK =(sysdate -1) –

在表中插入数据后添加spool命令,然后在过程中添加select命令。所以它看起来应该是这样的:

insert into product... 
commit; 
spool product.txt; 
select * from product; 
spool off; 
.. 
.. 
insert into ABCD... 
commit; 
spool ABCD.txt; 
select * from ABCD; 
spool off; 
.. 
+0

执行查询时, 假脱机U:\ output.dat select * from DED_TIBCO_NXP; 假脱机我收到以下错误: ORA-00900:无效的SQL语句 –

+0

我认为你错过了假脱机命令后的分号 –

+0

仍然是同样的错误 –