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のになぜ必要なのかdocExtTableDOC_TABLETYPE

4

1 に答える 1

0

しかし、キャストする必要がありますか?

Oracle が Oracle 8.0 で初めて TABLE() 関数を導入したとき、CAST は必須でした。ただし、Oracle はしばらく前にトートロジーを認識しており、CAST は通常、後のバージョンではオプションです。

質問に のタグを付けました[oracle11g]。では、CAST を削除するとどうなるでしょうか。つまり、これが機能することを期待します:

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