0

在这个存储的过程片段中:

CREATE OR REPLACE PROCEDURE PORTAL_OWNER.searchAtTransfers_prc_xmltype (
   usercredential      IN     VARCHAR,
   doc_result_cursor      OUT SYS_REFCURSOR)
IS
..
..
   docExtTable     DOC_TABLETYPE;//user defiend type that is a collection of below Type.
   docExtRecord    DOC_ROWTYPE;//user defined type
BEGIN
    SELECT DOC_ROWTYPE (extractvalue (value (t), 'transfers/userRequestId')
         , extractvalue (value (t), 'transfers/fromAccount/acctId')      
    BULK COLLECT INTO docExtTable
   FROM TABLE (XMLSEQUENCE (EXTRACT (response, '//transferSearchResponse/transfers'))) t;

   OPEN doc_result_cursor FOR 
        SELECT * FROM TABLE (CAST (docExtTable AS DOC_TABLETYPE));

   COMMIT;
END;

我的问题是:为什么我们需要CAST (docExtTable AS DOC_TABLETYPE什么时候docExtTable已经被定义为DOC_TABLETYPE

4

1 回答 1

0

但是我们需要 CAST 吗?

当 Oracle 在 Oracle 8.0 中首次引入 TABLE() 函数时,CAST 是强制性的。但是,Oracle 不久前就认识到了重言式,并且 CAST 在以后的版本中通常是可选的。

您已将问题标记为[oracle11g]。那么如果删除 CAST 会发生什么?也就是说,我希望这可以工作:

from table (SELECT * FROM docExtTable);
于 2012-08-16T15:57:53.233 回答