我有一个特别紧迫的问题;我在MSSQL中有一套存储过程,不能直接转换为Oracle。我做了一个很好的尝试,但我认为我的范例在甲骨文中的工作方式与MSSQL相同 - 而且它是一个基本的东西。
在MSSQL中,我:
创建一个临时表(我不知道设计时的结构,只是运行时 - 我从另一个表创建临时表) 将记录插入临时表
然后,运行一组动态确定的存储过程(来自数据库中的数据),用于优化数据(即删除不符合条件的行),从临时表
< / LI>然后,从临时表中返回记录。
在MSSQL中可以正常工作(此刻,直到我可以优化整个图层)。但是,在oracle中,我们尝试了同样的事情。由于Oracle没有相同的临时表范例,我最终创建了一个表,然后在事务结束时删除它。我真正想做的是弄清楚如何使它像MSSQL一样表现。
我想也许我可以像MSSQL临时表一样使用游标,但是我不知道如何从游标中删除记录而不删除数据库中的记录 - 至少,&#39;我每次查找时都会删除游标。
实施例
(适用MSSQL)
SELECT
objectid, typeid, field1, field2, field3, field4
INTO
#temptable
FROM
objecttable
EXEC FilterRecordsSuite #temptable
SELECT * FROM #temptable
(适用ORACLE)
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE mytemptable_<uniquevalue> AS
SELECT
objectid, typeid, field1, field2, field3, field4
FROM
objecttable
';
COMMIT;
FilterRecordsSuite mytemptable_<uniquevalue>
OPEN :some_ref_cursor FOR
'SELECT * FROM mytemptable_<uniquevalue>';
EXECUTE IMMEDIATE 'DROP TABLE mytemptable_<uniquevalue>'
这不是我的代码,这是古老而可怕的。我只是想让它发挥作用,直到我能将整个事物重构成可理解的东西。不幸的是,我对Oracle的经验很少,而且保持应用程序正常运行,甚至性能稍微好的直接要求超过了我的重构能力。
有什么想法吗?