带字符串变量的oracle open cursor给了我错误

时间:2017-05-13 04:37:55

标签: oracle plsql cursor

我在使用字符串变量

打开游标时遇到问题

这是我的oracle数据库代码

FUNCTION f_get_cursor(p_date_to_forecast VARCHAR) RETURN SYS_REFCURSOR AS
v_cursor SYS_REFCURSOR;
v_groupby_stmt VARCHAR(200) := 'GROUP BY ' 
                            || CASE WHEN p_date_to_forecast = 'HOLIDAY' THEN 
                               'DAY, ' ELSE '' END 
                            || 'TNI, FRMP, LR, HH;';

v_select_stmt VARCHAR2(1000) := 'SELECT WEEKDAY, TNI, FRMP, LR, HH, 
                                 AVG(Coalesce(VOLUME, 0)) AS AverageVolume
                                 FROM (SELECT v.TNI, v.FRMP, v.LR, v.DAY, 
                                       v.HH, v.VOLUME, CASE WHEN 
                                       hd.HOLIDAY_DATE is not null 
                                       then ''HOLIDAY''
                                       ELSE trim(to_char(v.DAY, ''Day'')) 
                                       END AS WEEKDAY
                                       FROM v_nem_rm16 v
                                       LEFT JOIN DBP_ADMIN.DBP_HOLIDAY hd 
                                       ON v.DAY = hd.HOLIDAY_DATE
                                       WHERE v.STATEMENT_TYPE !=''FORCAST'')
                                 WHERE WEEKDAY = ''' || p_date_to_forecast 
                                       || '''' || ' ' || v_groupby_stmt;

BEGIN
   OPEN v_cursor FOR v_select_stmt;
   return v_cursor;
END;

我只是试图根据参数“p_date_to_forcast”打开游标,该参数只是一周的名称字符串,如“星期六,星期二......等等”,然后返回光标。

当我运行查询时,我收到此错误 00911. 00000 - “无效字符” *原因:标识符可能不以除以外的任何ASCII字符开头            字母和数字。第一个之后也允许$#_            字符。双引号括起来的标识符可能包含            除了双引号之外的任何字符。替代报价            (q'#...#')不能使用空格,制表符或回车符            分隔符。对于所有其他上下文,请参阅SQL语言            参考手册。 *操作:

问题是什么?我该如何解决?

感谢

1 个答案:

答案 0 :(得分:0)

你试过这个吗?

     for r_cur in your_cursor_name(Your_parameter) Loop
     -- your working --
      End loop;