我正在尝试在SQL语句下面形成表单。但我好像搞不懂这个奇怪的错误。我已经在循环之外单独地执行了每个语句,它们运行得很好。请有人帮我找出错误。
误差
ORA-06550: line 6, column 14:
PLS-00306: wrong number or types of arguments in call to '||'
ORA-06550: line 6, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:PLSQL语句:
DECLARE
L_sql VARCHAR2(2000):=NULL;
BEGIN
FOR val IN (SELECT generation_qtr from test_1)
LOOP
L_sql:=L_sql ||' MAX(DECODE(generation_qtr, '||''''||val||''''||' cum_actual_gen)) AS ' || val ||','||chr(10);
END LOOP;
L_sql:='SELECT assetname, '|| L_sql;
L_sql:=substr(L_sql,1,LENGTH(L_sql)-1);
dbms_output.put_line(L_sql);
END;甲骨文版本-11.2
发布于 2015-01-28 14:50:57
您直接指的是val,但这是游标行类型。您需要指定列名,即使只有一个:
... ||val.generation_qtr|| .....。在这两个地方,您都会在连接中使用它。所以它会变成:
L_sql:=L_sql ||' MAX(DECODE(generation_qtr, '||''''
|| val.generation_qtr ||''''||' cum_actual_gen)) AS '
|| val.generation_qtr ||','||chr(10);如果您要动态地执行这个操作,那么新的行字符将不是很有用,但我想它们有助于调试。
https://stackoverflow.com/questions/28194980
复制相似问题