有人可以给我一个关于如何以及何时使用 sys_refcursor 的小解释吗?
我现在处于一种情况。我正在将几个过程从 Mysql 5.0 迁移到 Oracle 11g。Mysql 程序允许我:
1.创建临时表
2. 将数据插入临时表 / 查询这些表 / 做一些处理
3.删除临时表
我一直在搜索并发现我无法在没有EXECUTE IMMEDIATE语句的过程中创建 DDL语句。我尝试使用该语句创建临时表,并立即在其上插入一些值,但它不起作用,因为该表尚不存在。我试图创建一个创建临时表的函数,然后从过程中调用它,但发生了同样的情况。
我需要实现与 MySQL 相同的步骤。这种情况经常发生(有这种“问题”的程序太多了)而且它们非常大。
我有什么选择,你有什么推荐?
我的意思是:
CREATE OR REPLACE FUNCTION FUNCTION1(ID IN NUMBER) RETURN NUMBER
BEGIN
SELECT COLUMN1, COLUMN2, COLUMN3 FROM TABLE1
WHERE COLUMN1<= Y AND (CASE WHEN ID < X THEN COLUMN1<COLUMN2 ELSE COLUMN2>COLUMN3 END),
AND COLUMN 3 = XYZ;
RETURN SOMETHING.
END;
Run Code Online (Sandbox Code Playgroud)
我知道case 语句不返回表达式而是返回一个值。我如何使用某种“条件语句”或其他东西来返回表达式?我过去常常使用“IF 条件”在 mysql 中轻松完成,但我不知道如何在 Oracle 11g 中完成。
编辑:它的工作原理是否相同,不仅适用于 where 陈述者而且适用于 select ?