2015-11-03 70 views
0

我有一个要求在特定的路径中生成.txt文件,我试过在11i实例中,它的工作正常。但问题是当我尝试添加更多的列(仅80列)它只生成空文件。当我删除一些列再次工作的罚款。UTL_FILE生成空文件

我在R12实例中尝试过,它的工作正常,并且它产生了超过120列作为单行。 相同的代码在11i实例中不工作,在11i实例中有没有需要从DBA端或任何限制设置。 任何人都可以在此帮忙。

+4

请提供您尝试过的代码/脚本。 – Rene

+0

我讨厌问,但这两个实例的数据是否相同?或者你有可能在你的实例中达到了最大缓冲区大小?如果你只是打印出标题行,至少会在11?如果这是一个缓冲区问题,首先我会建议在put_line调用中添加可选的autoflush第三个参数= TRUE,并且可以选择分解输出行。把前50列,fflush,然后PUT_LINE其余。 –

回答

0
PROCEDURE xxx_test ( RETCODE IN VARCHAR2, ERRBUFF IN VARCHAR2) IS 
FILENAME UTL_FILE.FILE_TYPE; 
v_file_name varchar2(250); 
v_count NUMBER; 
CURSOR C1 IS 
SELECT * 
FROM 
GRC.GR_PO_EDI_TEMP_ARCHIVE GPET 
,OE_ORDER_HEADERS_ALL  OOHA 
,OE_ORDER_LINES_ALL   OOLA 
WHERE GPET.ORDERNUMBER    = OOHA.CUST_PO_NUMBER 
AND OOHA.HEADER_ID    = OOLA.HEADER_ID 
AND OOHA.ORG_ID     = OOLA.ORG_ID 
AND  nvl(GPET.PO_ACK_STATUS,'N') <> 'Y' ; 
i C1%ROWTYPE; 
BEGIN 
BEGIN 
SELECT 'orders_1.1_'||to_char(sysdate,'yyyymmddHH24MMSS')||'.txt' INTO v_file_name FROM dual; 
exception 
WHEN others THEN 
v_file_name := NULL; 
RAISE_APPLICATION_ERROR(-20201,'File Name Generation failed.!!'); 
END; 
FILENAME:= UTL_FILE.FOPEN('/home/outbox',v_file_name,'w',32767); 
/* THIS WILL CREATE THE HEADING IN the FILE */ 
UTL_FILE.PUT_LINE(FILENAME, 
'orderNumber' ||' '|| 
'orderDate' ||' '|| 
'orderType' ||' '|| 
'currency' ||' '|| 
'paymentTerm' ||' '|| 
'paymentTermText' ||' '|| 
'customer' ||' '|| 
'supplier' ||' '|| 
'shipToSite' ||' '|| 
'shipFromSite' ||' '|| 
'freightTerm' ||' '|| 
'freightTermMeaning' ||' '|| 
'freightCarrier' ||' '|| 
'buyerNotesHeader' ||' '|| 
'supplierNotesHeader' ||' '|| 
'buyerName' ||' '|| 
'buyerEmail' ||' '|| 
'buyerContact' ||' '|| 
'lineNumber' ||' '|| 
'item' ||' '|| 
'itemDescriptionFreeForm' ||' '|| 
'UOM' ||' '|| 
'price' ||' '|| 
'quantity' ||' '|| 
'reqDeliveryDate' ||' '|| 
'supplierSuggestedPrice' ||' '|| 
'buyerNotesLines' ||' '|| 
'supplierNotesLines' ||' '|| 
'lineShippedQuantity' ||' '|| 
'lineReceivedQuantity' ||' '|| 
'lineBilledQuantity' ||' '|| 
'scheduleNum' ||' '|| 
'scheduleQuantity' ||' '|| 
'scheduleDeliveryDate' ||' '|| 
'promisedDeliveryDate' ||' '|| 
'quantityPromised' ||' '|| 
'buyerNotesSchedule' ||' '|| 
'supplierNotesSchdule' ||' '|| 
'quantityReceived' ||' '|| 
'quantityShipped' ||' '|| 
'Action' ||' '|| 
'Id' ||' '|| 
'shipToSiteName' ||' '|| 
'shipToSiteaddress1' ||' '|| 
'shipToSiteaddress2' ||' '|| 
'shipToSitecity' ||' '|| 
'shipToSitestate' ||' '|| 
'shipToSitepostalcode' ||' '|| 
'shipToSitecountry' ||' '|| 
'totallines' ||' '|| 
'orderlinesquantitysum' ||' '|| 
'scheduleStatus' ||' '|| 
'erpHeaderId' ||' '|| 
'erpLineId' ||' '|| 
'erpScheduleId' ||' '|| 
'billToSiteName' ||' '|| 
'billToSiteaddress1' ||' '|| 
'billToSiteaddress2' ||' '||       
'billToSitecity' ||' '|| 
'billToSitestate' ||' '|| 
'billToSitepostalcode' ||' '|| 
'billToSitecountry' ||' '|| 
'supplieritemnumber' ||' '|| 
'manufacturer' ||' '|| 
'flexField1' ||' '|| 
'flexField2' ||' '|| 
'flexField3' ||' '|| 
'flexField4' ||' '|| 
'flexField5' ||' '|| 
'flexField6' ||' '|| 
'flexField7' ||' '|| 
'flexField8' ||' '|| 
'flexField9' ||' '|| 
'flexField10' ||' '|| 
'SupplierName' ||' '|| 
'LineValue' ||' '|| 
'OrderValue' ||' '|| 
'customererpitemid' ||' '|| 
'suppliererpitemid' ||' '|| 
'salesOrder' ||' ' 
); 
OPEN c1; 
loop 
fetch c1 INTO i; 
exit WHEN c1%notfound; 

UTL_FILE.PUT_LINE(FILENAME, 
i.ordernumber||' '|| 
i.orderdate||' '|| 
i.ordertype||' '|| 
i.currency||' '|| 
i.paymentterm||' '|| 
i.paymenttermtext||' '|| 
i.customer||' '|| 
i.supplier||' '|| 
i.shiptosite||' '|| 
i.shipfromsite||' '|| 
i.freightterm||' '|| 
i.freighttermmeaning||' '|| 
i.freightcarrier||' '|| 
i.buyernotesheader||' '|| 
i.suppliernotesheader||' '|| 
i.buyername||' '|| 
i.buyeremail||' '|| 
i.buyercontact||' '|| 
i.linenumber||' '|| 
i.item||' '|| 
i.itemdescriptionfreeform||' '|| 
i.uom||' '|| 
i.price||' '|| 
i.quantity||' '|| 
i.reqdeliverydate||' '|| 
i.suppliersuggestedprice||' '|| 
i.buyernoteslines||' '|| 
i.suppliernoteslines||' '|| 
i.lineshippedquantity||' '|| 
i.linereceivedquantity||' '|| 
i.linebilledquantity||' '|| 
i.schedulenum||' '|| 
i.schedulequantity||' '|| 
i.scheduledeliverydate||' '|| 
i.promiseddeliverydate||' '|| 
i.quantitypromised||' '|| 
i.buyernotesschedules||' '|| 
i.suppliernotesschdules||' '|| 
i.quantityreceived||' '|| 
i.quantityshipped||' '|| 
i.action||' '|| 
i.id||' '|| 
i.shiptositename||' '|| 
i.shiptositeaddress1||' '|| 
i.shiptositeaddress2||' '|| 
i.shiptositecity||' '|| 
i.shiptositestate||' '|| 
i.shiptositepostalcode||' '|| 
i.shiptositecountry||' '|| 
i.totallines||' '|| 
i.orderlinesquantitysum||' '|| 
i.schedulestatus||' '|| 
i.erpheaderid||' '|| 
i.erplineid||' '|| 
i.erpscheduleid||' '|| 
i.billtositename||' '|| 
i.billtositeaddress1||' '|| 
i.billtositeaddress2||' '|| 
i.billtositecity||' '|| 
i.billtositestate||' '|| 
i.billtositepostalcode||' '|| 
i.billtositecountry||' '|| 
i.supplieritemnumber||' '|| 
i.manufacturer||' '|| 
i.flexfield1||' '|| 
i.flexfield2||' '|| 
i.flexfield3||' '|| 
i.flexfield4||' '|| 
i.flexfield5||' '|| 
i.flexfield6||' '|| 
i.flexfield7||' '|| 
i.flexfield8||' '|| 
i.flexfield9||' '|| 
i.flexfield10||' '|| 
i.suppliername||' '|| 
i.linevalue||' '|| 
i.ordervalue||' '|| 
i.customererpitemid||' '|| 
i.suppliererpitemid||' '|| 
i.salesordernumber||' ' 
); 
END LOOP; 
UTL_FILE.FCLOSE(FILENAME); 
fnd_file.put_line(fnd_file.output,'File created & File Name: '||v_file_name  ); 
dbms_output.put_line(v_file_name||' '||'file created '||'for Order Number: '||i.ordernumber); 
exception 
WHEN UTL_FILE.INVALID_PATH THEN 
null; 
END xxx_test; 
0

我有同样的问题。

事实证明,这是一个文件大小问题,小于70K和文件将复制好,但70K或以上,它将最终为0字节。

这不是oracle错误,但共享驱动器是如何安装的。

如果你可以尝试fcopy到本地驱动器,你会发现它工作正常。

获取谁负责安装共享驱动器来解决问题。