【问题标题】:Trying to get table from Oracle function. Get Inconsistent datatypes instead试图从 Oracle 函数中获取表。改为获取不一致的数据类型
【发布时间】:2012-10-04 22:22:43
【问题描述】:

我正在尝试从 Oracle 中的存储函数返回查询。这个简单的尝试失败了:

CREATE OR REPLACE TYPE GetObjectsForFolderObjectType IS OBJECT (
       FOLDER_ID NUMBER(9), OBJECT_ID NUMBER(9)
);

CREATE OR REPLACE TYPE GetObjectsForFolderTableType IS
       TABLE OF GetObjectsForFolderObjectType;

CREATE OR REPLACE FUNCTION GetObjectsForFolder
       (FOLDER_ID INTEGER, FOLDER_DATA_TABLE VARCHAR2)
RETURN GetObjectsForFolderTableType IS 
       THE_RESULT GetObjectsForFolderTableType := GetObjectsForFolderTableType ( );
BEGIN 
       EXECUTE IMMEDIATE 'SELECT * FROM '||FOLDER_DATA_TABLE BULK COLLECT INTO THE_RESULT;
       RETURN THE_RESULT;
END; 

SELECT * FROM TABLE(GetObjectsForFolder(1, 'MY_TABLE_NAME'));

上面的结果是

ORA-00932: inconsistent datatypes: expected - got -
ORA-06512: at "USERNAME.GETOBJECTSFORFOLDER", line 6
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

注意:虽然我在示例中掩盖了一些内容,但 ORA-00932 行确实显示“预期 - 得到 -”。

【问题讨论】:

    标签: oracle plsql stored-functions ora-00932


    【解决方案1】:

    在动态 PL/SQL 语句中,您不能将表列直接批量收集到对象表中。相反,您必须先将列选择到对象中,然后将对象批量收集到表类型中:

        CREATE OR REPLACE TYPE GetObjectsForFolderObjectType IS OBJECT (
               FOLDER_ID NUMBER(9), OBJECT_ID NUMBER(9)
        );
    
        CREATE OR REPLACE TYPE GetObjectsForFolderTableType IS
               TABLE OF GetObjectsForFolderObjectType;
    
        CREATE OR REPLACE FUNCTION GetObjectsForFolder
               (FOLDER_ID INTEGER, FOLDER_DATA_TABLE VARCHAR2)
        RETURN GetObjectsForFolderTableType IS 
               THE_RESULT GetObjectsForFolderTableType := GetObjectsForFolderTableType ( );
        BEGIN 
               EXECUTE IMMEDIATE 'SELECT GetObjectsForFolderObjectType(folder_id, object_id) FROM '||FOLDER_DATA_TABLE BULK COLLECT INTO THE_RESULT;
               RETURN THE_RESULT;
        END; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多