Postgresql 9.5 - FUNC DOESNT进入循环

时间:2017-07-23 07:29:03

标签: postgresql function loops plpgsql

我创建了一个效果不佳的函数。它没有进入循环,我不明白为什么。

我的功能:

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但是同样的错误)。

请帮忙。

0 个答案:

没有答案