Plsql 请告诉我为什么程序没有执行:下面给出了错误代码
在这里,我试图创建.csv文件,以显示两个字段的数据从视图,请其需要充分如何创建csv文件Plsql 请告诉我为什么程序没有执行:下面给出了错误代码,plsql,oracle10g,oracle-sqldeveloper,Plsql,Oracle10g,Oracle Sqldeveloper,在这里,我试图创建.csv文件,以显示两个字段的数据从视图,请其需要充分如何创建csv文件 CREATE OR replace PROCEDURE "SP_APPLICANT_AREA_COUNT_REPORT" ( p_partner_id NUMBER := 999, p_user_session_id VARCHAR2 := NULL, p_file_path IN OUT VARCHAR2) AS -- NOCOPY --v_USERID NUMBER :
CREATE OR replace PROCEDURE "SP_APPLICANT_AREA_COUNT_REPORT" (
p_partner_id NUMBER := 999,
p_user_session_id VARCHAR2 := NULL,
p_file_path IN OUT VARCHAR2)
AS
-- NOCOPY
--v_USERID NUMBER :=P_USER_ID;
--v_TABLE_NAME VARCHAR2(200):=P_TABLE_NAME;
--v_PARTNER_ID NUMBER:=P_PARTNER_ID;
v_file utl_file.file_type;
cur_field SYS_REFCURSOR;
v_fields VARCHAR2(32767) := NULL;
v_field VARCHAR2(32767);
v_count NUMBER := 0;
v_curfields VARCHAR2(32767);
v_curfilefields VARCHAR2(32767);
v_tempfields VARCHAR2(32767);
v_tempfieldsvalues VARCHAR2(32767);
v_counter NUMBER := 1;
v_str VARCHAR2(32767);
v_strheader VARCHAR2(32767);
v_curcounter NUMBER := 1;
v_filecount NUMBER := 1;
v_name VARCHAR2(500) := 'clob2file_buffered1.csv';
c_maxline CONSTANT PLS_INTEGER := 32767;
v_eligible_number NUMBER := -999;
v_count1 NUMBER := 0;
cur_rec SYS_REFCURSOR;
v_file_max_limit NUMBER := 25001;
v_search_criteria1 VARCHAR2(4000) := NULL;
v_search_criteria2 VARCHAR2(4000) := NULL;
v_csvfilename VARCHAR2(4000);
v_ac_name VARCHAR2(30) := 'bid_reason';
v_rp_name VARCHAR2(30) := 'Reason of Bid';
v_str_l VARCHAR2(200) := '';
v_area_description VARCHAR2(500) := NULL;
v_applicant_count NUMBER := 0;
BEGIN
IF ( p_user_session_id IS NOT NULL ) THEN
SELECT 'ApplicantCountReport'
||'_'
||p_user_session_id
||'_'
||To_char(SYSDATE, 'ddmmyyhhmissss')
INTO v_csvfilename
FROM dual;
ELSE
SELECT 'ApplicantCountReport'
||To_char(SYSDATE, 'ddmmyyhhmissss')
INTO v_csvfilename
FROM dual;
END IF;
SELECT area_description
--INTO v_AREA_DESCRIPTION
FROM applicant_area_count_view
WHERE partner_id = p_partner_id;
SELECT applicant_count
INTO v_applicant_count
FROM applicant_area_count_view
WHERE partner_id = p_partner_id;
/* select AREA_DESCRIPTION,APPLICANT_COUNT
INTO v_AREA_DESCRIPTION,v_APPLICANT_COUNT
from APPLICANT_AREA_COUNT_VIEW
where PARTNER_ID=P_PARTNER_ID;
*/
BEGIN
/*
v_name:=substr(v_name,0,length(v_name)-6)||'_'||TO_CHAR(v_fileCount)||'.csv';
*/
v_name := v_csvfilename
||'_'
||To_char(SYSDATE, 'YYYYMMDD')
||'.csv';
v_file := utl_file.Fopen(location => 'CBLDOC_DIR', filename => v_name,
open_mode => 'w',
max_linesize => c_maxline);
utl_file.Put_line(v_file, v_name);
p_file_path := p_file_path
||v_name
||',';
EXCEPTION
WHEN OTHERS THEN
utl_file.Fclose(v_file);
END;
dbms_output.Put_line(v_name);
EXCEPTION
WHEN OTHERS THEN
RAISE;
--raise_application_error (-20002,'An error has occurred.');
--raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;
ERROR: ERROR:- ORA-01403: no data found
ORA-06512: at "CBLLIVE21092011_DEV.SP_APPLICANT_AREA_COUNT_REPORT", line 108
ORA-06512: at line 10
Process exited.
ORA-01403出错:找不到数据,因为您正在代码中执行隐式游标,即选择。。。进入而不是游标cur是select…,如果没有返回任何行,则会出现该错误。因此,您必须传入一个不存在的partner_id,从而导致选择失败
通常,在使用隐式游标时,应确保处理两种异常情况:未找到数据和行太多。在某些情况下,您可能不需要处理太多行异常—例如,如果您在主键上进行选择,则永远不会返回多行。因为您的一条select语句没有找到数据?当其他人正在隐藏错误发生的实际行时,您正在捕获错误,这在您调试时非常没有帮助。如果这是当前代码,则可能是来自申请人\区域\计数\视图的查询;注释掉的into子句表明它不是。ORA-01403:未找到任何数据ORA-06512:在CBLLIV21092011_DEV.SP_申请人_AREA_COUNT_REPORT,第108行解释了这一点。感谢大家,问题已经解决,再次感谢大家的支持。