Plsql 将表变量从SQL Server 2008 R2迁移到Oracle 11g
我正在尝试将此代码从SQL Server迁移到Oracle,但我遇到了许多错误;有人能帮我吗 SQL Server中的代码: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
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。我想你在这里问的是。