Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用select语句并将函数插入游标_Sql_Oracle_Plsql_With Statement - Fatal编程技术网

Sql 使用select语句并将函数插入游标

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

可以将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 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