暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将函数与query子句结合使用

askTom 2018-10-04
145

问题描述

有点新手,希望我能找到正确的方向。我已经简化了一些事情,以证明我正在经历的问题 (而且我真的很难在其他帖子上获得明确的答案)。

运行以下操作时:

with
  function f_double(x in number)
    return number
    is y number(10,2);
  begin
    y:=0;
    select query_val into y from my_query;
    y:=x*y;
    return y;
  end;
  my_query as (
  select 2 as query_val from dual)
select f_double(2) as my_result from dual;
复制


我得到的错误:

ORA-06552: PL/SQL: ORA-00942: table or view does not exist
06552. 00000 -  "PL/SQL: %s"
*Cause:    
*Action:
Error at Line: 2 Column: 25
复制


当我用以下内容替换f_double函数中的select语句时:

select 1 into y from dual;
复制


它的工作原理-所以我假设我的问题是我定义和/或使用my_query部分在底部的方式。

任何帮助将不胜感激。

专家解答

这里有几个问题:

W跟子句中的-PL/SQL是12c功能。假设你的11版本是正确的,你还不能使用这个!
-您正在尝试访问PL/SQL块中的命名子查询。但是你定义了这个after函数。所以代码看不到!

把这个子查询放在里面

with
  function f_double(x in number)
    return number
    is y number(10,2);
  begin
    y:=0;
    select query_val into y from (
      select 2 as query_val from dual
    );
    y:=x*y;
    return y;
  end;
select f_double(2) as my_result from dual;

MY_RESULT   
          4 
复制


虽然我很困惑为什么你试图从函数内部的子查询中获取值2...

如果my_query将值加倍,请在主选择中使用此值并将其传递给函数:

with
  function f_double(x in number)
    return number
    is y number(10,2);
  begin
    y:=2;
    y:=x*y;
    return y;
  end;
  my_query as (
  select 2 as query_val from dual)
select f_double(query_val) as my_result from my_query;

MY_RESULT   
          4
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论