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

Oracle 如何使用输入参数从dual创建select * 的游标?

ASKTOM 2019-02-07
343

问题描述

嗨,汤姆,

最近,我正在使用rqEval函数,它是Oracle Advanced Analytics的一部分。此函数的输入包括光标,例如
选择 *
从表 (rqEval (游标 (选择50 "除数",500 "numDots" 从对偶),
'从二元' 中选择1个id,1个val,
'Myrandomreddots2 '));


在我的情况下,我需要在PL/SQL中运行它,并希望传递输入参数并从那里创建游标。这是我所做的:
DECLARE
    partition_method VARCHAR2(100);
    query_type VARCHAR2(100);
    part_param NUMBER;
    selectivity NUMBER;
    pred NUMBER;
    v_Success NUMBER;
    cursorInput REF CURSOR 
BEGIN  
    partition_method:= 'HASH';
    query_type := '=';
    part_param := 10;
   selectivity := 0.1;   
   cursorInput := cursor(SELECT 'x2' "run_environ", partition_method "partition_method", query_type "query_type", part_param "part_param", selectivity "selectivity" FROM dual);
  选择 * INTO v_Success FROM table(rqEval(cursorInput, 'SELECT 1 SCORE FROM DUAL', 'par_score_scripts'));        
  
  DBMS_OUTPUT.PUT_LINE('Score: '|| v_Success||'!');
END;
/
复制


但随后它抛出一个错误:
错误报告-
ORA-06550: 第14行第27列:
PLS-00103: 当出现以下情况时,遇到符号 “SELECT”:

( ) - case mod new not null <一个标识符>
<双引号分隔标识符> <绑定变量>
表继续平均计数当前存在最大最小先前sql
stddev和方差执行多重集两个前导
拖尾forall合并年月日小时分钟秒
时区 _ 小时时区 _ 分钟时区 _ 区域时区 _ abbr
时间戳间隔日期
<具有字符集规格的字符串文字
ORA-06550: 第14行第176列:
PLS-00103: 遇到以下情况之一时遇到符号 “)”:

。,@; 用于 <标识符>
具有相交的 <双引号分隔标识符> 组
减序分区开始子分区并集,其中连接
样品
ORA-06550: 第19行,第0列:
PLS-00103: 遇到以下情况之一时遇到符号 “文件结尾”:

结束非pragma最终可实例化可持久顺序
覆盖静态成员构造函数映射
06550. 00000-"行 % s,列 % s:\ n % s"
* 原因: 通常是PL/SQL编译错误。
* 行动:


从选择var从dual (其中var是输入变量) 中构造游标的正确方法是什么?

专家解答

您应该能够隔离打开ref光标,然后将其作为常规参数传递,例如

SQL> create or replace
  2  function ff(rc sys_refcursor) return int is
  3    x int;
  4  begin
  5    fetch rc into x;
  6    return 1;
  7  end;
  8  /

Function created.

SQL>
SQL> declare
  2    rc sys_refcursor;
  3    q int;
  4  begin
  5    open rc for select 99 from dual;
  6    q := ff(rc);
  7  end;
  8  /

PL/SQL procedure successfully completed.
复制


文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论