首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成动态PLSQL时的误差获取

生成动态PLSQL时的误差获取
EN

Stack Overflow用户
提问于 2015-01-28 14:40:19
回答 1查看 46关注 0票数 0

我正在尝试在SQL语句下面形成表单。但我好像搞不懂这个奇怪的错误。我已经在循环之外单独地执行了每个语句,它们运行得很好。请有人帮我找出错误。

误差

代码语言:javascript
复制
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语句:

代码语言:javascript
复制
 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-28 14:50:57

您直接指的是val,但这是游标行类型。您需要指定列名,即使只有一个:

代码语言:javascript
复制
... ||val.generation_qtr|| ...

..。在这两个地方,您都会在连接中使用它。所以它会变成:

代码语言:javascript
复制
      L_sql:=L_sql ||' MAX(DECODE(generation_qtr, '||''''
        || val.generation_qtr ||''''||' cum_actual_gen)) AS '
        || val.generation_qtr ||','||chr(10);

如果您要动态地执行这个操作,那么新的行字符将不是很有用,但我想它们有助于调试。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28194980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档