我想构建可修复的函数来导出数据表格用户选择任意列的用户选择任意数量的列用户选择csv
文件我搜索,发现他们是远离像... link here ...和另一种方式使用我选择的动态光标,但我得到如下所示的错误试图通过传递动态光标来生成导出到csv
我试图使用具有RETURN类型的CURSOR但是,只有通过嵌入式动态OPEN语句,无RETURN类型的REF CURSOR可以OPEN“
NOTE此过程尚未完成,因为I需要制作UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.x)
;也可以解决我的工作就可以了,但我需要摆脱这种错误的任何建议是非常赞赏
[Error] PLS-00320 (9: 13): PLS-00320: the declaration of the type of this expression is incomplete or malformed [Error] PLS-00382 (27: 22): PLS-00382: expression is of wrong type [Error] PLS-00320 (29: 29): PLS-00320: the declaration of the type of this expression is incomplete or malformed [Error] PLS-00320 (30: 44): PLS-00320: the declaration of the type of this expression is incomplete or malformed [Error] PLS-00320 (31: 44): PLS-00320: the declaration of the type of this expression is incomplete or malformed [Error] PLS-00320 (32: 44): PLS-00320: the declaration of the type of this expression is incomplete or malformed [Error] PLS-00320 (33: 44): PLS-00320: the declaration of the type of this expression is incomplete or malformed [Error] PLS-00320 (34: 44): PLS-00320: the declaration of the type of this expression is incomplete or malformed [Error] PLS-00320 (35: 44): PLS-00320: the declaration of the type of this expression is incomplete or malformed [Error] PLS-00320 (36: 44): PLS-00320: the declaration of the type of this expression is incomplete or malformed
CREATE OR REPLACE FUNCTION EXPORT_TO_CSV_NEW (P_SQL_STMT IN VARCHAR2,
P_TABLE_NAME IN VARCHAR2,
P_CREATED_BY IN VARCHAR2) RETURN NUMBER IS
TYPE CUR_TYPE IS REF CURSOR; --- RETURN WAREHOUSE%ROWTYPE;
CUR CUR_TYPE;
CUR_RG CUR%ROWTYPE;
SQL_STMT VARCHAR2 (4000);
FILETYPE UTL_FILE.FILE_TYPE;
FILENAME VARCHAR2(256);
DIRECTORYNAME VARCHAR2(1280) := 'SRJD_DEFAULT_TEMP_DIR';
ERR_CODE VARCHAR2(64);
ERR_MSG VARCHAR2(1024);
BEGIN
SAVEPOINT SETP1;
FILENAME := TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') || '_WAREHOUSE.CSV';
FILETYPE := UTL_FILE.FOPEN (DIRECTORYNAME,FILENAME,'w',32767);
SQL_STMT := P_SQL_STMT;
OPEN CUR FOR SQL_STMT;
LOOP
FETCH CUR INTO CUR_RG;
UTL_FILE.PUT (FILETYPE, CUR_RG.PRODUCT_ID);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.CLASSIFICATION_ID);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.PRODUCT_DESC);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.MANUFACTORY);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.BOX_COUNT);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.BOX_COST);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.BOX_ITEM_COUNT);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.ITEM_COST);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.MEASUREMENT_UNIT);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.REVENUE_PCT);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.ITEM_PRICE);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.TOTAL_ITEM_QUANTITY);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.TOTAL_COST);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.NOTES);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.CREATED_BY);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.CREATED_ON);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.UPDATED_BY);
UTL_FILE.PUT (FILETYPE, ',' || CUR_RG.UPDATED_ON);
UTL_FILE.NEW_LINE (FILETYPE);
EXIT WHEN CUR%NOTFOUND;
END LOOP;
UTL_FILE.FCLOSE (FILETYPE);
CLOSE CUR;
RETURN (1);
EXCEPTION WHEN OTHERS THEN
ROLLBACK TO STEP1;
ERR_CODE := SQLCODE;
ERR_MSG := SUBSTR(SQLERRM, 1, 1024);
SQL_STMT := F_INS_ERROR_LOG(SYSDATE, --P_ERROR_TIME,
P_CREATED_BY, --P_USER_ID,
'EXPORT_TO_CSV_NEW', --P_PROGRAM_UNIT,
NULL, --P_ERROR_LOCATION,
'FileName '||FILENAME,--P_KEY_DATA_DESC,
ERR_CODE, --P_ERROR_CODE,
ERR_MSG); --P_ERROR_MSG';
RETURN -1;
END EXPORT_TO_CSV_NEW;
/
您可能希望从此开放源代码开始将Oracle SQL语句导出为CSV:https://github.com/VentechCMS/utilities/blob/master/data_dump.sql –