【问题标题】:Accessing joined elements访问连接的元素
【发布时间】:2015-02-03 21:20:02
【问题描述】:

SELECT 仅与CELLS 表一起使用时,以下代码有效。但是,当有多个表连接时,下面的类型就不再合适了。

PROCEDURE drawComponent(title IN VARCHAR2, tbl IN VARCHAR2, link IN VARCHAR2) IS

TYPE ref_typ IS REF CURSOR;
var_ref ref_typ;
rec CELLS%ROWTYPE;

BEGIN
    OPEN var_ref FOR 'SELECT CELLS.ID as CELLID, CELLS.NUM as CELLNUM, CELLS.' || link || ' as ID, ' || tbl || '.REMOVED as REMOVED FROM CELLS LEFT OUTER JOIN ' || tbl || ' ON CELLS.' || link || ' = ' || tbl || '.ID ORDER BY CELLS.NUM';

    loop
        FETCH var_ref INTO rec;
        EXIT WHEN var_ref%NOTFOUND;
        htp.p(rec.CELLID);
    end loop;
END;

问题是我应该声明 rec 的类型是什么?

【问题讨论】:

  • 也许是 sys_refcursor?对不起,我有点累了,不想写详细的例子:)
  • 如果我写rec.CELLNUM,我有Invalid reference to variable 'REC'
  • 德米特里,谢谢,好好休息 :)
  • 我刚刚在 oracle 12.1 上进行了检查 - 没有问题,您问题中的代码在这两种情况下都可以正常工作。
  • 只有当我选择以下答案时它才有效。否则当然 CELLS 表对其他表字段一无所知。

标签: oracle plsql oracle-apex


【解决方案1】:

无法获取弱动态引用游标的记录类型。

因此,您最好的选择可能是根据您需要的各种列的类型定义自定义RECORD类似的东西:

...

TYPE rec_typ IS RECORD (
  CELLID CELLS.ID%TYPE,
  CELLNUM CELLS.NUM%TYPE,
  ID NUMBER,     -- or whatever type suits your needs
  REMOVED NUMBER  -- or whatever type suits your needs
);
rec rec_type;

...

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多