douxuan4556 2017-05-31 18:12
浏览 83
已采纳

如何在存储过程和语句之间传递日期参数?

I did this statement and it's ok

SELECT a, b 
FROM T_COMMENTS 
WHERE DATE_COMMENTS BETWEEN DATE '2014-12-05' AND DATE '2017-05-16'

But I wanted to create a stored procedure and there is a mistake:

CREATE OR REPLACE PROCEDURE FACEBOOK.PR_SEL_ALL_COM_PH
(CONSULTA OUT SYS_REFCURSOR,COD_US INT,INDATE1 IN VARCHAR2, INDATE2 IN VARCHAR2) IS
BEGIN
    OPEN CONSULTA FOR SELECT a,b FROM T_COMMENTS WHERE DATE_COMMENTS BETWEEN DATE INDATE1 AND DATE INDATE2;
END;
/

What would be the problem in my stored procedure, thanks in advance. Update 1: I'm using php. When I push date for indate1 and indate2 appears this exception

Warning: oci_execute() [function.oci-execute]: ORA-01861: literal does not match format string

How can I solve that? Thanks in advance.

  • 写回答

1条回答 默认 最新

  • dousilie9522 2017-05-31 18:24
    关注

    Pass dates as dates:

    create or replace procedure facebook.pr_sel_all_com_ph
        ( consulta out sys_refcursor
        , cod_us int
        , indate1 in date
        , indate2 in date )
    is
    begin
        open consulta for
            select a,b
            from   t_comments
            where  date_comments between indate1 and indate2;
    end;
    /
    

    If for some reason you absolutely have to pass them as strings, you will need to convert these to actual dates within the procedure using to_date(indate1,'YYYY-MM-DD'), although of course this gives your procedure a whole extra validation task. (How will the caller know what format to use? What if they pass them in the wrong format? How much should the procedure check the format prior to executing the query? and so on. It's a huge pain and not really the procedure's job.)

    The reason date indate1 fails is that date literals only work with literal quoted text, not variables.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起