Sql 使用select语句并将函数插入游标
可以将with结构与游标中的函数一起使用,我不知道是否声明了不正确的with结构,在过程中使用with函数会出现以下错误pl sql语句不受支持Sql 使用select语句并将函数插入游标,sql,oracle,plsql,with-statement,Sql,Oracle,Plsql,With Statement,可以将with结构与游标中的函数一起使用,我不知道是否声明了不正确的with结构,在过程中使用with函数会出现以下错误pl sql语句不受支持 错误消息清楚地表明您不能执行您要执行的操作,但是如果您的光标如下所示,则不必执行 CURSOR c_detail IS WITH test_data AS( SELECT 36.25 AS FOB_I, 12536.36 AS FOB_TOTAL, 362 AS W FROM dual UNION ALL SELECT 15.36 AS
错误消息清楚地表明您不能执行您要执行的操作,但是如果您的光标如下所示,则不必执行
CURSOR c_detail IS
WITH test_data AS(
SELECT 36.25 AS FOB_I, 12536.36 AS FOB_TOTAL, 362 AS W FROM dual UNION ALL
SELECT 15.36 AS FOB_I, 3678.65 AS FOB_TOTAL, 362 AS W FROM dual UNION ALL
SELECT 878.77 AS FOB_I, 89653.13 AS FOB_TOTAL, 362 AS W FROM dual
)
SELECT TD.FOB_I,
TD.FOB_TOTAL,
CASE WHEN TD.FOB_I > 0 AND TD.FOB_TOTAL > 0 AND TD.W > 0
THEN (TD.FOB_I * TD.W) / TD.FOB_TOTAL
ELSE 0
END WEIGHT
FROM test_data TD
;
[TL;DR]您可以在子查询factoring子句中声明函数,但正如Justin Cave所述,它仅在您以动态SQL的形式执行查询时才起作用,并且在将来的数据库版本中可能会支持在游标内使用静态SQL中的函数 此带有函数的子查询factoring子句在游标外部工作: 具有 带_函数的函数 p_id的编号 返回号码 是 开始 返回42+p_id; 终止 测试单元数据id为
从DUAL CONNECT中逐级选择您使用的Oracle版本是什么?基于此,我相信您需要使用动态SQL才能完成此任务this@M10Oracle 12C感谢大家的帮助,我还以为是我在光标处宣布了一些错误
CURSOR c_detail IS
WITH test_data AS(
SELECT 36.25 AS FOB_I, 12536.36 AS FOB_TOTAL, 362 AS W FROM dual UNION ALL
SELECT 15.36 AS FOB_I, 3678.65 AS FOB_TOTAL, 362 AS W FROM dual UNION ALL
SELECT 878.77 AS FOB_I, 89653.13 AS FOB_TOTAL, 362 AS W FROM dual
)
SELECT TD.FOB_I,
TD.FOB_TOTAL,
CASE WHEN TD.FOB_I > 0 AND TD.FOB_TOTAL > 0 AND TD.W > 0
THEN (TD.FOB_I * TD.W) / TD.FOB_TOTAL
ELSE 0
END WEIGHT
FROM test_data TD
;
ORA-06550: line 7, column 14:
PL/SQL: ORA-00905: missing keyword
ORA-06550: line 6, column 3:
PL/SQL: SQL Statement ignored
ORA-06550: line 13, column 5:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
begin function pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior
1, 43
2, 44
3, 45