UTL_FILE生成空文件
问题描述:
我有一个要求在特定的路径中生成.txt文件,我试过在11i实例中,它的工作正常。但问题是当我尝试添加更多的列(仅80列)它只生成空文件。当我删除一些列再次工作的罚款。UTL_FILE生成空文件
我在R12实例中尝试过,它的工作正常,并且它产生了超过120列作为单行。 相同的代码在11i实例中不工作,在11i实例中有没有需要从DBA端或任何限制设置。 任何人都可以在此帮忙。
答
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;
答
我有同样的问题。
事实证明,这是一个文件大小问题,小于70K和文件将复制好,但70K或以上,它将最终为0字节。
这不是oracle错误,但共享驱动器是如何安装的。
如果你可以尝试fcopy到本地驱动器,你会发现它工作正常。
获取谁负责安装共享驱动器来解决问题。
请提供您尝试过的代码/脚本。 – Rene
我讨厌问,但这两个实例的数据是否相同?或者你有可能在你的实例中达到了最大缓冲区大小?如果你只是打印出标题行,至少会在11?如果这是一个缓冲区问题,首先我会建议在put_line调用中添加可选的autoflush第三个参数= TRUE,并且可以选择分解输出行。把前50列,fflush,然后PUT_LINE其余。 –