Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PL/SQL中订单日期的工作日标识为存储函数_Sql_Oracle_Function_Plsql - Fatal编程技术网

将PL/SQL中订单日期的工作日标识为存储函数

将PL/SQL中订单日期的工作日标识为存储函数,sql,oracle,function,plsql,Sql,Oracle,Function,Plsql,代码: 创建或替换功能日 ( 在bb_篮中创建了P_日期。dtcreated%类型 ) 返回日期为 lv_日期_创建bb_篮子。dtcreated%类型; 开始 选择to_char(to_date(P_date_CREATED,'yyyyy-mm-dd'),'DAY')DAY_CREATED 进入lv_创建日期_ 从BB_篮 在lv_date_创建的地方,这里似乎有很多问题 让我们从没有发现数据问题开始。若在select语句中使用INTO,select不返回任何行,则会出现“未找到数据”异常。这

代码:

创建或替换功能日
(
在bb_篮中创建了P_日期。dtcreated%类型
)
返回日期为
lv_日期_创建bb_篮子。dtcreated%类型;
开始
选择to_char(to_date(P_date_CREATED,'yyyyy-mm-dd'),'DAY')DAY_CREATED
进入lv_创建日期_
从BB_篮

在lv_date_创建的地方,这里似乎有很多问题

让我们从没有发现数据问题开始。若在select语句中使用INTO,select不返回任何行,则会出现“未找到数据”异常。这可以通过内部带有异常处理程序的anonymouse begin end块来处理,但我相信情况并非如此。例如:

CREATE OR REPLACE FUNCTION DAY_ORD_SF 
(
  P_DATE_CREATED IN bb_basket.dtcreated%type 
)
RETURN DATE AS
    lv_date_created bb_basket.dtcreated%type;
BEGIN
    SELECT to_char(to_date(P_DATE_CREATED,'yyyy-mm-dd'),'DAY') DAY_CREATED
        INTO lv_date_created
    FROM BB_BASKET
    WHERE lv_date_created <= sysdate
    ORDER BY lv_date_created ASC;
RETURN lv_date_created;
END DAY_ORD_SF;
/

SELECT IDBASKET, dtcreated date_created, to_char(DTCREATED,'DAY') DAY_CREATED, day_ord_sf(dtcreated) weekday_created
FROM BB_BASKET
order by DTCREATED asc;
从不满足条件1=2,因此select始终不返回任何行,这将始终产生“未找到数据”错误。通过异常处理程序,我们决定下一步要做什么。在本例中,Null不起任何作用

回到函数,条件是如果变量lv_date_created小于或等于当前日期,则执行某些操作。这永远不会起作用,因为创建的lv_日期将在执行时等于null。它只是在函数中声明,然后在select中使用。这将始终导致false,因此select将始终不返回行,也不会返回“未找到数据”异常

您还提到希望函数返回varchar2,但您的定义说它返回日期。另外,变量lv_date_created的类型是date,这是返回的变量,您用varchar2值填充它,因此Oracle显然正在对其值进行一些不受控制的转换,这不会引发预期数据类型的异常


另外,条件lv_date_创建嗯,这里似乎有很多问题

让我们从没有发现数据问题开始。若在select语句中使用INTO,select不返回任何行,则会出现“未找到数据”异常。这可以通过内部带有异常处理程序的anonymouse begin end块来处理,但我相信情况并非如此。例如:

CREATE OR REPLACE FUNCTION DAY_ORD_SF 
(
  P_DATE_CREATED IN bb_basket.dtcreated%type 
)
RETURN DATE AS
    lv_date_created bb_basket.dtcreated%type;
BEGIN
    SELECT to_char(to_date(P_DATE_CREATED,'yyyy-mm-dd'),'DAY') DAY_CREATED
        INTO lv_date_created
    FROM BB_BASKET
    WHERE lv_date_created <= sysdate
    ORDER BY lv_date_created ASC;
RETURN lv_date_created;
END DAY_ORD_SF;
/

SELECT IDBASKET, dtcreated date_created, to_char(DTCREATED,'DAY') DAY_CREATED, day_ord_sf(dtcreated) weekday_created
FROM BB_BASKET
order by DTCREATED asc;
从不满足条件1=2,因此select始终不返回任何行,这将始终产生“未找到数据”错误。通过异常处理程序,我们决定下一步要做什么。在本例中,Null不起任何作用

回到函数,条件是如果变量lv_date_created小于或等于当前日期,则执行某些操作。这永远不会起作用,因为创建的lv_日期将在执行时等于null。它只是在函数中声明,然后在select中使用。这将始终导致false,因此select将始终不返回行,也不会返回“未找到数据”异常

您还提到希望函数返回varchar2,但您的定义说它返回日期。另外,变量lv_date_created的类型是date,这是返回的变量,您用varchar2值填充它,因此Oracle显然正在对其值进行一些不受控制的转换,这不会引发预期数据类型的异常


另外,条件lv_date_创建了可能的副本,我也这么做了,但我仍然什么也没有,我不知道为什么我在以前的任务中使用了,但没有找到数据。可能的副本我也这么做了,我仍然什么也没有,我不知道为什么我没有找到数据,当我在以前的任务中使用时。我想我没有想到这一点,但我应该将其切换为大于或等于lv_created_date吗?因为当我使用p_date_created时,它现在给我选择了“太多行”。当我使用lv_created_date时,会弹出查询,但最后一列中的结果为“(null)”。有什么想法吗?我添加了更多关于这个函数的错误的细节。我是从手机上写的,所以请给我一点时间,我将添加一些示例,说明如何编辑代码以使其正常工作。添加了一些代码,可以为您指出可能需要的方向。在我的任务中,我必须提供dtcreated(date_created),因为它将返回varchar2数据类型。我用了第二个例子,它给了我一个工作日,但工作日不知何故是假的。我不太清楚为什么,但他们是。我已经读了你所有的解释,我读的很有道理。它们怎么样?你认为它们是以什么方式关闭的?我想我还没有想到,但我应该将其切换到大于或等于lv_created_date吗?因为当我使用p_date_created时,它现在给我选择了“太多行”。当我使用lv_created_date时,会弹出查询,但最后一列中的结果为“(null)”。有什么想法吗?我添加了更多关于这个函数的错误的细节。我是从手机上写的,所以请给我一点时间,我将添加一些示例,说明如何编辑代码以使其正常工作。添加了一些代码,可以为您指出可能需要的方向。在我的任务中,我必须提供dtcreated(date_created),因为它将返回varchar2数据类型。我用了第二个例子,它给了我一个工作日,但工作日不知何故是假的。我不太清楚为什么,但他们是。我已经读了你所有的解释,我读的很有道理。它们怎么样?你认为他们以什么方式离开了?
CREATE OR REPLACE FUNCTION DAY_ORD_SF 
(
  P_IDBASKET IN bb_basket.idbasket%type 
)
RETURN VARCHAR2 AS
    lv_date_created VARCHAR2(240);
BEGIN
    SELECT to_char(dtcreated,'DAY') DAY_CREATED
        INTO lv_date_created
    FROM BB_BASKET
    WHERE IDBASKET = P_IDBASKET;
RETURN lv_date_created;
END DAY_ORD_SF;
/
CREATE OR REPLACE FUNCTION DAY_ORD_SF 
(
  P_DATE_CREATED IN bb_basket.dtcreated%type 
)
RETURN VARCHAR2 AS
BEGIN
RETURN to_char(P_DATE_CREATED,'DAY');
END DAY_ORD_SF;
/