我创建了一个效果不佳的函数。它没有进入循环,我不明白为什么。
我的功能:
CREATE OR REPLACE FUNCTION Control_Reports_Pg.control_reports_fn (P_Report_Type smallint, P_Log_File_Name text,C_Path text) RETURNS bigint AS $body$
DECLARE
V_Return smallint;
V_Function_Return smallint:=1;
C_Daily_Reports varchar(400);
C_Function_Name varchar(200) := 'Control_Reports_Fn';
Rec_Daily_Reports CONTROL_REPORTS%ROWTYPE;
BEGIN
C_Daily_Reports := 'SELECT REPORT_ORDER,PROCEDURE_NAME,DIRECTORY_NAME,FILE_NAME,TITLE FROM CONTROL_REPORTS WHERE RUN_FLAG=1::bigint AND REPORT_TYPE=' || P_Report_Type || '::smallint ORDER BY REPORT_ORDER ';
RAISE NOTICE 'sql to run over in loop : %',C_Daily_Reports;
FOR Rec_Daily_Reports IN EXECUTE C_Daily_Reports
LOOP
RAISE NOTICE 'INSIDE LOOP OF CONTROL_REPORTS, Procedure_name : %, File_name : %, Directory_name : %',Rec_Daily_Reports.Directory_Name,Rec_Daily_Reports.File_Name, Rec_Daily_Reports.Title;
END LOOP;
........
mydb=> \d control_reports;
Table "mysc.control_reports"
Column | Type | Modifiers
----------------+------------------------+-----------
report_order | bigint |
report_type | smallint |
procedure_name | character varying(100) |
directory_name | character varying(100) |
file_name | character varying(100) |
title | character varying(500) |
run_flag | bigint |
我从psql运行func时得到的错误:
mysc=> select control_reports_pg.control_reports_fn(1::smallint ,
'daily_log_control_file.txt'::text,'/PostgreSQL/comb_logs'::text);
NOTICE: sql to run over in loop : SELECT
REPORT_ORDER,PROCEDURE_NAME,DIRECTORY_NAME,FILE_NAME,TITLE FROM CONTROL_REPORTS
WHERE RUN_FLAG=1::bigint AND REPORT_TYPE=1::smallint ORDER BY REPORT_ORDER
NOTICE: FUNC : Control_Reports_Fn, SQLERRM: invalid input syntax for
integer: "Chrg_in_b"
当我在psql中运行select时,我没有得到任何错误,我得到了结果。 Chrg_in_b是我从select查询返回的第一行的Procedure_name列的值。 (如果我删除了我的命令,只是得到一个不同的procedure_name但是同样的错误)。
请帮忙。