Plsql 将表变量从SQL Server 2008 R2迁移到Oracle 11g

Plsql 将表变量从SQL Server 2008 R2迁移到Oracle 11g,plsql,oracle11g,sql-server-2008-r2,Plsql,Oracle11g,Sql Server 2008 R2,我正在尝试将此代码从SQL Server迁移到Oracle,但我遇到了许多错误;有人能帮我吗 SQL Server中的代码: DECLARE @tblFacultad TABLE ( IdFacultad INT, NomFacultad VARCHAR(200) ); INSERT INTO @tblFacultad (IdFacultad, NomFacultad) SELECT IdFacultad, NomFacultad FROM FACULTAD_loc

我正在尝试将此代码从SQL Server迁移到Oracle,但我遇到了许多错误;有人能帮我吗

SQL Server中的代码:

DECLARE @tblFacultad TABLE
( IdFacultad INT,
  NomFacultad VARCHAR(200)  
);

INSERT INTO @tblFacultad (IdFacultad, NomFacultad) 
    SELECT IdFacultad, NomFacultad 
    FROM FACULTAD_local

SELECT * FROM @tblFacultad
Oracle中的代码:

CREATE OR REPLACE TYPE objFacultad AS OBJECT
(
   IdFacultad NUMBER,
   NomFacultad varchar(255)
)

/
CREATE OR REPLACE TYPE tblFacultad is table of objFacultad;

/
SELECT IDFACULTAD,NOMFACULTAD BULK COLLECT INTO tblFacultad FROM FACULTAD;
在Oracle中运行代码时,出现以下错误:

ORA-03001:未实现的功能 300100000-未实现的功能 *原因:此功能未实现。 *行动:无。 莱尼亚错误:11,A列:54


在Oracle SQL中不能这样定义表变量。您可以定义集合类型,然后可以将其用作表列类型,或者更通常地用作PL/SQL代码中的类型。例如:

create or replace type objfacultad as object
( idfacultad number
, nomfacultad varchar(255)
)
/

create or replace type tblfacultad is table of objfacultad;
/

declare
    demo_t tblfacultad;
begin
    select objfacultad(idfacultad,nomfacultad) bulk collect into demo_t
    from   ( select 1 as idfacultad, 'F1' as nomfacultad from dual
             union all
             select 2 as idfacultad, 'F2' as nomfacultad from dual ) facultad;

    dbms_output.put_line('Array contains ' || demo_t.count || ' elements:');

    for r in (
        select f.idfacultad, f.nomfacultad
        from   table(demo_t) f
    )
    loop
        dbms_output.put_line(r.idfacultad || ' ' || r.nomfacultad);
    end loop;
end;
/
输出:

Array contains 2 elements:
1 F1
2 F2
请注意,create type语句是,起始声明部分是一个块。在与Oracle合作时,我们必须意识到这一区别。无论我使用的是PL/SQL Developer、Toad、文本编辑器还是其他工具都没有区别。

是一个用于处理Oracle SQL和PL/SQL的桌面工具,类似于或Toad。我想你在这里问的是。