Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带UDT的Oracle函数上的ORA-00932_Oracle_Plsql - Fatal编程技术网

带UDT的Oracle函数上的ORA-00932

带UDT的Oracle函数上的ORA-00932,oracle,plsql,Oracle,Plsql,我试图创建一个函数,但是我得到了以下错误 LINE/COL ERROR -------- ----------------------------------------------------------------- 12/3 PL/SQL: SQL Statement ignored 12/18 PL/SQL: ORA-00932: inconsistent datatypes: expected UDT got NUMBER 代码是: CREATE TYPE join_t

我试图创建一个函数,但是我得到了以下错误

LINE/COL ERROR
-------- -----------------------------------------------------------------
12/3     PL/SQL: SQL Statement ignored
12/18    PL/SQL: ORA-00932: inconsistent datatypes: expected UDT got NUMBER
代码是:

CREATE TYPE join_t IS OBJECT (
   inn     NUMBER(38),
   out     NUMBER(38)
);
/

CREATE TYPE join_jt IS TABLE OF join_t;
/

CREATE OR REPLACE FUNCTION knn_join RETURN number
IS
    CURSOR cur_fv_table IS SELECT id,fv FROM londonfv WHERE id <= 3000;

    retval join_jt := join_jt ();
    var_fv londonfv.fv%type;
    var_id londonfv.id%type;
    join_table join_jt := join_jt();
BEGIN
    OPEN cur_fv_table;
    LOOP
        FETCH cur_fv_table INTO var_id,var_fv;
        SELECT join_jt(r.id, var_id) BULK COLLECT INTO join_table
        FROM   londonfv r
        WHERE  manhattan_dist(r.fv,var_fv) <= 5;
    END LOOP;           
END;
/
我怎样才能解决这个问题

它在Oracle 11g上运行


提前谢谢

您的函数出现了相同的错误,mate:LINE/COL error--------------------------------------------5/3 PL/SQL:SQL语句忽略了5/24 PL/SQL:ORA-00932:不一致的数据类型:预期的数量得到了blob此项成功,但。。。创建或替换函数knn_join RETURN number IS curs cur_fv_table IS SELECT id,fv FROM londonfv,其中id@Siqueira已更新-函数将不会按您的预期工作,因为循环的每次迭代都会将join_表重新初始化为空集合,然后在下一次迭代再次清除之前为该迭代重新填充。大容量收集不会追加内容,而是替换内容。我知道这一点。该函数没有意义,因为它尚未完成。我打算将答案收集到retval表中。。。然后把它还给我。
CREATE TABLE londonfv (
 ID      NUMBER(38) NOT NULL,
 PHOTOID VARCHAR2(10),
 FV      BLOB
);

CREATE OR REPLACE TYPE join_t IS OBJECT (
   inn  NUMBER(38),
   out  NUMBER(38)
);
/

CREATE TYPE join_jt IS TABLE OF join_t;
/

CREATE OR REPLACE FUNCTION manhattan_dist(
  fv1 LONDONFV.FV%TYPE,
  fv2 LONDONFV.FV%TYPE
) RETURN NUMBER
IS
BEGIN
  RETURN 0;                              -- Implement this.
END;
/

CREATE OR REPLACE FUNCTION knn_join RETURN number
IS
  join_table join_jt;                    -- You don't need to initialise this BULK COLLECT will.
BEGIN
  SELECT join_t( b.id, a.id )            -- JOIN_T not JOIN_JT
  BULK COLLECT INTO join_table
  FROM   londonfv a
         INNER JOIN
         londonfv b
         ON ( manhattan_dist(a.fv,b.fv) <= 5 )
  WHERE  a.id <= 3000;

  RETURN 0;
END;
/
CREATE TABLE londonfv (
 ID      NUMBER(38) NOT NULL,
 PHOTOID VARCHAR2(10),
 FV      BLOB
);

CREATE OR REPLACE TYPE join_t IS OBJECT (
   inn  NUMBER(38),
   out  NUMBER(38)
);
/

CREATE TYPE join_jt IS TABLE OF join_t;
/

CREATE OR REPLACE FUNCTION manhattan_dist(
  fv1 LONDONFV.FV%TYPE,
  fv2 LONDONFV.FV%TYPE
) RETURN NUMBER
IS
BEGIN
  RETURN 0;                              -- Implement this.
END;
/

CREATE OR REPLACE FUNCTION knn_join RETURN number
IS
  join_table join_jt;                    -- You don't need to initialise this BULK COLLECT will.
BEGIN
  SELECT join_t( b.id, a.id )            -- JOIN_T not JOIN_JT
  BULK COLLECT INTO join_table
  FROM   londonfv a
         INNER JOIN
         londonfv b
         ON ( manhattan_dist(a.fv,b.fv) <= 5 )
  WHERE  a.id <= 3000;

  RETURN 0;
END;
/